【问题标题】:Get the name of the directory where a script is executed获取执行脚本的目录名
【发布时间】:2011-03-23 08:03:01
【问题描述】:

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

dirname $0

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

任何人都知道一种获取脚本运行路径的方法吗?

【问题讨论】:

标签: linux bash scripting


【解决方案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”所在的文件夹。

      【讨论】:

      • 这是我最终使用的,因为它更简单,并且可以与符号链接或文件一起使用。
      猜你喜欢
      • 2023-03-29
      • 2018-08-18
      • 2010-12-25
      • 2014-06-30
      • 2013-07-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多