通过$0
变量获取bash中正在运行的脚本的路径是微不足道的。但是,如果您通过另一个脚本点缀它,它将无效,而是您将获得调用脚本的路径。考虑一下这个例子:
#!/bin/bash
# script1.sh
echo $(readlink -f $0)
...
#!/bin/bash
# script2.sh
. /tmp/script1.sh
echo $(readlink -f $0)
上述脚本的输出是:
/tmp/script2.sh
/tmp/script2.sh
但是,如果虚线脚本中的$0
发出了该脚本的路径,那么输出将是:
/tmp/script1.sh
/tmp/script2.sh
我怎样才能获得正确的价值?
答案 0 :(得分:2)
要克服此问题(特定于bash),您可以使用${BASH_SOURCE[0]}
#!/bin/bash
# script1.sh
real_dollar_zero=${BASH_SOURCE[0]}
echo $(readlink -f $real_dollar_zero)
现在输出是:
/tmp/script1.sh
/tmp/script2.sh
中提琴! - The strung musical instrument often confused with a violin!