可能重复:
In the bash script how do I know the script file name?
我经常需要bash脚本的文件系统来引用其他所需的资源。通常在shebang行之后使用以下代码。它设置一个名为'scriptPos'的变量,包含脚本的当前路径
scriptPos=${0%/*}
它工作正常,但有更直观的东西替换shell扩展吗?
答案 0 :(得分:1)
有dirname
,但需要fork
:
scriptPos=$(dirname "$0")
答案 1 :(得分:0)
一个选项是
scriptPos=$(dirname $0)
这是以额外流程为代价的,但更具自我描述性。如果脚本直接在当前,则输出不同(在我看来更好):
#!/bin/bash
scriptPos=$(dirname $0)
echo '$0:' $0
echo 'dirname:' $scriptPos
echo 'expansion:' ${0%/*}
$ bash tmp.bash
$0: tmp.bash
dirname: .
expansion: tmp.bash
更新:尝试解决jm666指出的缺点。
#!/bin/bash
scriptPos=$( v=$(readlink "$0") && echo $(dirname "$v") || echo $(dirname "$0") )