Str*_*mer 4 unix shell dash-shell
我试图让一个源 shell 脚本确定它自己的位置,我发现这对于 dash 来说是一项艰巨的任务。
在 bash、sh 和 csh 中,我可以使用:$_。
在鱼中,我可以使用(status -f).
总的来说,我没有运气......
我尝试获取如下所示的 path.sh 文件,结果如下:
# path.sh
called=$_
echo called: $called
echo underscore: $_
echo zero: $0
echo dash_source: $DASH_SOURCE
echo bash_source: $BASH_SOURCE
Run Code Online (Sandbox Code Playgroud)
dash -c ". path.sh"
输出:
called: /usr/local/bin/dash
underscore: /usr/local/bin/dash
zero: dash
dash_source:
bash_source:
Run Code Online (Sandbox Code Playgroud)
如何在破折号中获取path.sh的路径?
我同意接受的答案,尽管我能够使用 lsof 使其工作:
x=$(lsof -p $$ -Fn0 | tail -1); script=${x#n}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为 dash 使脚本在执行时保持打开状态。这需要是脚本的第一行,否则如果 dash 稍后打开其他文件描述符,则可能会失败。