获取“源”ed脚本的位置

时间:2012-05-01 19:02:47

标签: linux bash shell

我想执行像(shell is bash)

这样的语句
/# source /workspace/scripts/script.sh
/workspace/scripts# source script.sh

在script.sh中我希望得到自己的位置。 (script.sh不会在PATH变量中)

我可以在运行脚本时使用readlink -f $0来执行此操作,但是当我source时它也不起作用。

希望解决方案依赖于我运行source命令的位置。 (否则pwd就足够了)

这可能吗?

2 个答案:

答案 0 :(得分:4)

在100%的情况下,无法可靠地找到位置 如果您使用 bash ,最好的选择是$BASH_SOURCE变量 This link对此主题非常有帮助。

答案 1 :(得分:0)

由于script.sh位于您的路径中,您应该可以使用which获取完整路径。因此,在脚本中,如果$0不是完整路径,则可以执行which $0

carabiner$ cat ~/bin/test.sh
#!/bin/sh

echo test - $0 $1
which $0

carabiner$ source test.sh
test - test.sh
test.sh is /home/zigdon/bin/test.sh