获取执行脚本的目录的名称

时间:2010-07-30 15:47:41

标签: linux bash scripting

我有一些脚本,它使用周围目录中的文件。它使用

dirname $0

命令。 它应该在我运行此脚本的任何目录中工作,但是当我运行指向该脚本的符号链接时,我得到了符号链接的路径。所以我得到dirname的输出而不是脚本本身的路径。

任何人都知道如何获取脚本运行的路径?

4 个答案:

答案 0 :(得分:4)

获取脚本的真实路径

if [ -L $0 ] ; then
    ME=$(readlink $0)
else
    ME=$0
fi
DIR=$(dirname $ME)

答案 1 :(得分:0)

如果您安装了realpath

$(dirname $(realpath $0))

答案 2 :(得分:0)

除非我误解你,否则问题应与以下问题相同:How do you normalize a file path in Bash?

未提及的选项有以下python单行:

python2.6 -c "import os,sys; print os.path.realpath(sys.argv[1])" "$0"

最后,请记住在“$ 0”附近使用双引号。

答案 3 :(得分: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”所在的文件夹。