【发布时间】:2011-03-23 08:03:01
【问题描述】:
我有一些脚本,它使用它周围目录中的文件。它使用
dirname $0
命令。 它应该在我运行这个脚本的任何目录中工作,但是当我运行一个指向该脚本的符号链接时,我得到了符号链接的路径。所以我得到 dirname 的输出而不是脚本本身的路径。
任何人都知道一种获取脚本运行路径的方法吗?
【问题讨论】:
我有一些脚本,它使用它周围目录中的文件。它使用
dirname $0
命令。 它应该在我运行这个脚本的任何目录中工作,但是当我运行一个指向该脚本的符号链接时,我得到了符号链接的路径。所以我得到 dirname 的输出而不是脚本本身的路径。
任何人都知道一种获取脚本运行路径的方法吗?
【问题讨论】:
获取脚本的真实路径
if [ -L $0 ] ; then
ME=$(readlink $0)
else
ME=$0
fi
DIR=$(dirname $ME)
【讨论】:
如果您安装了realpath:
$(dirname $(realpath $0))
【讨论】:
除非我误会你,问题应该和How do you normalize a file path in Bash?中的问题一样
没有提到的一个选项是下面的python one-liner:
python2.6 -c "import os,sys; print os.path.realpath(sys.argv[1])" "$0"
最后,记得在 "$0" 周围使用双引号。
【讨论】:
一个更简单的解决方案:
dirname $(readlink -f $0)
在 Ubuntu 14.04 上测试:
which java 返回/usr/bin/java,这是一个符号链接。
readlink -f `which java`
返回/usr/lib/jvm/java-8-oracle/jre/bin/java
最后,
dirname $(readlink -f `which java`)
返回/usr/lib/jvm/java-8-oracle/jre/bin,即“java”所在的文件夹。
【讨论】: