当通过符号链接调用时,如何在脚本内部获取脚本文件路径
问题的原因是,当通过符号链接调用脚本时,脚本本身需要获取脚本文件的路径。解决方法是通过判断脚本文件是否为符号链接,并使用不同的命令来获取脚本文件的路径。
具体解决方法如下所示:
if [ -L $0 ] ; then DIR=$(dirname $(readlink -f $0)) ; else DIR=$(dirname $0) ; fi ;
上述代码通过判断`$0`是否为符号链接(`-L`),来决定使用不同的命令来获取脚本文件的路径。如果是符号链接,则使用`readlink -f`命令来获取符号链接的实际路径;如果不是符号链接,则直接使用`dirname $0`命令来获取脚本文件的路径。
如果`readlink`命令不可用,可以参考这个链接中的回答来解决:[how to resolve symlinks in a shell script](http://stackoverflow.com/questions/7665)。
关于为什么需要在`$0`是符号链接或非符号链接时运行不同的命令,可以参考这个链接:[apply readlink to a non symlink file](https://unix.stackexchange.com/questions/432475/apply-readlink-to-a-non-symlink-file)。
不管`$0`是否包含符号链接,为什么不直接使用`$(dirname $(readlink -f $0))`命令来获取脚本文件的路径呢?