我想执行像(shell is bash)
这样的语句/# source /workspace/scripts/script.sh
/workspace/scripts# source script.sh
在script.sh中我希望得到自己的位置。 (script.sh不会在PATH变量中)
我可以在运行脚本时使用readlink -f $0
来执行此操作,但是当我source
时它也不起作用。
我不希望解决方案依赖于我运行source
命令的位置。 (否则pwd
就足够了)
这可能吗?
答案 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