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

Linux 获取执行脚本的目录的名称,linux,bash,scripting,Linux,Bash,Scripting,我有一些脚本,它使用周围目录中的文件。它使用 dirname $0 指挥部。 它应该在我运行这个脚本的任何目录下工作,但是当我运行指向那个脚本的符号链接时,我得到了符号链接的路径。所以我得到的是dirname的输出,而不是脚本本身的路径 有人知道获取脚本运行路径的方法吗 获取脚本的真实路径 if [ -L $0 ] ; then ME=$(readlink $0) else ME=$0 fi DIR=$(dirname $ME) 如果已安装realpath: $(dirnam

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

dirname $0
指挥部。 它应该在我运行这个脚本的任何目录下工作,但是当我运行指向那个脚本的符号链接时,我得到了符号链接的路径。所以我得到的是dirname的输出,而不是脚本本身的路径


有人知道获取脚本运行路径的方法吗

获取脚本的真实路径

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

如果已安装
realpath

$(dirname $(realpath $0))

除非我误解了你的意思,否则问题应该与以下问题相同:

未提及的选项有以下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上测试:
哪个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”所在的文件夹。

可能的重复项也请参见。jmz的答案是我需要的。我有点害怕使用您的建议,因为命令名末尾的Python版本可能会因服务器而异,脚本的可移植性也会降低。哦,这是一个输入错误。python的任何最新版本(从2.2开始)都应该这样做,所以您可以使用“python”来代替。