我编写了一个 bash 命令,它生成一个用于重新启动服务器上所有 Weblogic (8、9、10) 实例的单行代码。该脚本运行良好,但我需要一个建议来使其使用目录名概念
/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort | sed 's/^/cd /' | sed 's/$/ ; cd .. ; \/recycle_script_directory_path\/recycle/ ;' | tr '\n' ' '
要重新启动 Weblogic 实例,需要从域目录内启动回收(/recycle_script_directory_path/recycle/)脚本,因为回收脚本会从域目录内的某些 .ini 文件中提取一些应用程序信息。
脚本的以下部分生成一行以 cd 到应用程序的父目录,即域目录
sed 's/$/ ; cd .. ; \/recycle_script_directory\/recycle/ ;' | tr '\n' ' '
我确信有更好的方法可以像 cd 一样 cd 到父目录目录名但是每次我运行以下 cd dirname 命令时,它都会抛出“变量语法”错误。
cd $(dirname '/domain_directory_path/app_name')
如何将 cd dirname 合并到我的 bash 命令中?
如果还有什么我可以做的改进,请告诉我
有关我的脚本的一些信息
1)以下部分列出了正在运行的 weblogic 实例及其完整路径
/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort
2)grep domain 部分是必需的,因为所有域名都以 domain 作为后缀
答案1
为了解决你的问题我写了一个非常基本的脚本:
#!/bin/bash
cd /usr/local/share/pixmaps
pwd
sleep 5
path=(dirname '/usr/local/shar/pixmaps')
echo $path
sleep 5
pwd 的输出很好
path 的输出是 dirname
因此,当您尝试时,cd $(dirname '/domain_directory_path/app_name')
它会尝试转到 cd dirname ...但显然它不存在
正如我从一个具有类似情况的博客中发现的那样:
$ cd $(dirname $(find / -name unknownfile.txt 2>/dev/null | head -n 1))
$ pwd
/home/peter/status/2007/november
因此,我认为cd $($(dirname '/domain_directory_path/app_name'))
应该可以解决你的问题
我尝试了以下脚本:
#!/bin/bash
cd /usr/local/share/pixmaps
pwd
sleep 5
path=($(dirname '/usr/local/share/pixmaps'))
echo $path
sleep 5
cd /
pwd
sleep 5
cd $path
pwd
输出为
/usr/local/share/pixmaps
/usr/local/share
/
/usr/local/share
还有一件事
直接做cd $($(dirname '/domain_directory_path/app_name'))
没有用
因此,我猜您首先需要提取某个变量的路径(我的脚本中的路径),然后 cd 到它,就像我在脚本中所做的那样
问候
安瑞特