【问题标题】:Linux bash: find full path of target file when executed via a softlinkLinux bash:通过软链接执行时查找目标文件的完整路径
【发布时间】:2012-07-18 18:04:17
【问题描述】:

当用户不是直接执行文件而是通过软链接执行文件时,如何找到正在执行的原始文件的完整路径。更准确地说,假设我有/original/path/a.sh,并在此处有一个指向该文件的软链接:~/Desktop/link-to-a.sh。如果用户实际执行~/Desktop/link-to-a.sh,我如何在a.sh 中找到"/original/path/"

下面的变量保存了~/Desktop/,这没什么用。

DIR="$( cd "$( dirname "$0" )" && pwd )"

【问题讨论】:

  • 您可能会发现BashFAQ/028 很有用。请注意,“软链接”也可以称为“符号链接”或“符号链接”。

标签: linux bash shell path


【解决方案1】:

使用readlink

要获取包含您的脚本的软链接目录的真实路径:

DIR=`dirname $0`
DIR=`readlink -f $DIR`

如果您的软链接直接指向脚本,而不是其目录,请执行此操作以获取包含脚本的真实目录:

FILE=`readlink -f $0`
DIR=`dirname $FILE`

【讨论】:

  • 你确定它有效吗? readlink 接受文件(软链接)而不是其父目录。 dirname 返回父目录,而不是链接的完整路径。
  • 你的意思是你有一个直接指向文件的软链接,而不是它的目录?如果是这样,新的解决方案可能就是您想要的解决方案。
  • 我的软链接指向该文件,但我想要该文件的原始目录。您的最后一次编辑返回原始 bash 文件。是否可以只获取目录的一部分?
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多