获取执行脚本的目录名

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脚本如何获取“当前工作路径”,“执行脚本所在路径”,“执行脚本所在路径和执行路径的相对路径”?(当前目录)

python中获取执行脚本路径方法

调用shell脚本时,获取脚本的当前目录

[Shell]获取当前正在执行脚本的绝对路径

如何取消服务器/主机空间目录脚本的执行权限

R语言在RstudioR Console获取当前路径并使用source函数执行R脚本