获取Shell脚本所在目录的上级目录

15

我这里有一个shell脚本:

/node_modules/.bin/exec.sh

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

这将产生:

/node_modules/.bin

但是我想要获取一个目录更高层级的内容,我只想要获取

/node_modules

我有困难找到答案,我猜测是:
`dirname $1`

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

不,完全不是,这与cwd/pwd无关。 - Alexander Mills
@AlexanderMills 这与此有关。获取您目标的父目录。然后获取目录的父目录。 - Ouroborus
1
不,这与当前工作目录或现在的工作目录无关,而是与包含脚本的目录有关,它们可能非常不同...想象一下你像这样执行脚本 ../../exec.sh,谢谢。 - Alexander Mills
@AlexanderMills 我实际上从可能的重复列表中选择了错误的答案。我现在撤回了我的关闭投票。 - Michael Kohl
2
你可以使用参数扩展来实现。p='/node_modules/.bin/exec.sh'; echo "${p%/*/*}" - Sundeep
@Ouroborus... "获取目标的父目录。然后获取该目录的父目录。"(其中目标是bash脚本)。这与PWD/CWD有什么关系? - Alexander Mills
2个回答

15

运行两次 dirname(嵌套)。

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

这很接近,但我认为应该是$(dirname `dirname $0`)。 - Alexander Mills

7

我认为答案是

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

不要忘记在"$0"周围加上双引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接