如何找到在 dash 中来源的脚本的路径?

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的路径?

Pau*_*nan 5

我同意接受的答案,尽管我能够使用 lsof 使其工作:

x=$(lsof -p $$ -Fn0 | tail -1); script=${x#n}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为 dash 使脚本在执行时保持打开状态。这需要是脚本的第一行,否则如果 dash 稍后打开其他文件描述符,则可能会失败。

  • 它适用于我的这个小修改: script=${x#*n} (2认同)