gpt4 book ai didi

bash - 如何在包含的 shell 脚本中查找脚本目录

转载 作者:行者123 更新时间:2023-11-29 09:14:07 25 4
gpt4 key购买 nike

我们现在使用 dirname$0 来查找 shell 脚本的目录,但是当该脚本包含在另一个脚本中时,这不起作用。

假设有两个文件 first.shsecond.sh:

/tmp/first.sh :

#!/bin/sh
. "/tmp/test/second.sh"

/tmp/test/second.sh :

#!/bin/sh
echo $0

通过运行 first.sh,第二个脚本也会打印 first.shsecond.sh 中的代码如何找到自己的目录? (正在寻找适用于 bash/csh/zsh 的解决方案)

最佳答案

没有一种解决方案在所有类型的 shell 中都同样有效。

bash 中,您可以使用 BASH_SOURCE:

$(dirname "$BASH_SOURCE")

例子:

$ cat /tmp/1.sh
. /tmp/sub/2.sh
$ cat /tmp/sub/2.sh
echo $BASH_SOURCE
$ bash /tmp/1.sh
/tmp/sub/2.sh

如您所见,脚本打印了 2.sh 的名称,尽管您启动了 /tmp/1.sh,但它包含带有 source 命令的 2.sh

我必须指出,此解决方案仅适用于 bash。在 Bourne-shell (/bin/sh) 中这是不可能的。

在 csh/tcsh/zsh 中,您可以使用 $_ 而不是 BASH_SOURCE

关于bash - 如何在包含的 shell 脚本中查找脚本目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com