无法使用 cd dirname 转到父目录

无法使用 cd dirname 转到父目录

我编写了一个 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 到它,就像我在脚本中所做的那样

问候

安瑞特

相关内容