当通过sym链接调用时,如何在脚本本身内获取脚本文件路径

Ma9*_*9uS 8 linux bash scripting

当我需要在脚本本身内部获取脚本文件的路径时,我使用以下内容:

`dirname $0`
Run Code Online (Sandbox Code Playgroud)

这工作文件,直到我通过sym链接调用脚本.在这种情况下,上面的代码打印链接的位置而不是原始文件.

有没有办法获取原始脚本文件的路径,而不是链接?

谢谢,迈克

dsm*_*dsm 15

if [ -L $0 ] ; then
    DIR=$(dirname $(readlink -f $0)) ;
else
    DIR=$(dirname $0) ;
fi ;
Run Code Online (Sandbox Code Playgroud)


lhu*_*ath 15

真的需要阅读以下BashFAQ文章:

事实上,$0黑客攻击是不可靠的,并且只要应用程序以第0个参数启动而不是应用程序的路径,它们就会失败.例如,login(1)将一个-应用程序名称放在前面$0,导致破坏,并且每当您调用的应用程序PATH $0将不包含应用程序的路径而只包含文件名时,这意味着您无法提取任何位置信息它的.还有很多方法可能会失败.

底线:不要依赖黑客,事实是你无法弄清楚你的脚本在哪里,所以使用配置选项来设置配置文件的目录或者你需要脚本的路径.