【问题标题】:Get parent directory of shell script's directory [duplicate]获取shell脚本目录的父目录[重复]
【发布时间】:2017-04-09 10:57:58
【问题描述】:

我这里有一个 shell 脚本:

/node_modules/.bin/exec.sh

在 exec.sh 脚本中,我想获取该脚本所在目录的父目录的路径(不是 pwd/cwd!)。我可以像这样获取包含目录:

`dirname $0`

这将产生:

/node_modules/.bin

但我希望获得更高的目录,我只想获得

/node_modules

我在寻找答案时遇到了麻烦,我的猜测是:

`dirname $1`

只是一个猜测,不确定这是否正确。谁能解释一下如何做到这一点以及它是如何工作的?

【问题讨论】:

  • 不,完全没有,这与cwd/pwd无关
  • @AlexanderMills 它与此有关。获取目标的父目录。然后获取那个目录的父目录。
  • 不,它与包含脚本的目录有关,而不是当前工作目录或当前工作目录,它们可能非常不同......想象你像这样执行脚本../ ../exec.sh,谢谢
  • @AlexanderMills 实际上我从可能的重复项列表中选择了错误的答案。我现在撤回了我的近距离投票。
  • 可以使用参数扩展..p='/node_modules/.bin/exec.sh'; echo "${p%/*/*}"

标签: bash shell


【解决方案1】:

运行 dirname 两次(嵌套)。

~$ dirname $PWD
/home
~$ dirname `dirname $PWD`
/
~$ 

【讨论】:

  • 这很接近,但我认为是 $(dirname `dirname $0`)
【解决方案2】:

我相信答案是

$(dirname $(dirname "$0"))

不要忘记 "$0" 周围的双引号

【讨论】: