获取执行脚本的目录名
Posted
技术标签:
【中文标题】获取执行脚本的目录名【英文标题】:Get the name of the directory where a script is executed 【发布时间】:2011-03-23 08:03:01 【问题描述】:我有一些脚本,它使用它周围目录中的文件。它使用
dirname $0
命令。 它应该在我运行这个脚本的任何目录中工作,但是当我运行一个指向该脚本的符号链接时,我得到了符号链接的路径。所以我得到 dirname 的输出而不是脚本本身的路径。
任何人都知道一种获取脚本运行路径的方法吗?
【问题讨论】:
Bash script: set current working directory to the directory of the script 的可能重复项 另见BashFAQ/028。 【参考方案1】:获取脚本的真实路径
if [ -L $0 ] ; then
ME=$(readlink $0)
else
ME=$0
fi
DIR=$(dirname $ME)
【讨论】:
【参考方案2】:如果您安装了realpath
:
$(dirname $(realpath $0))
【讨论】:
【参考方案3】:除非我误会你,问题应该和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" 周围使用双引号。
【讨论】:
jmz的答案正是我所需要的。我有点害怕使用你的建议,因为命令名称末尾的 Python 版本可能因服务器而异,并且脚本的可移植性较差。 哦,那是一个错字。任何最新版本的 python(从 2.2 开始)都应该这样做,所以你可以使用“python”来代替。【参考方案4】:一个更简单的解决方案:
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”所在的文件夹。
【讨论】:
这是我最终使用的,因为它更简单,并且可以与符号链接或文件一起使用。以上是关于获取执行脚本的目录名的主要内容,如果未能解决你的问题,请参考以下文章
linux shell脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录)