符号链接和硬链接问题

符号链接和硬链接问题

假设 /A/B/c.sh 符号链接到 /X/Y/c.sh。

  • 如果 c.sh 有命令“./SOMETHING”,则为“.”表示/A/B/ 或/X/Y/?
  • 硬链接怎么样?

答案1

.在任何一种情况下实际上都是当前工作目录;它与保存脚本的目录无关:

[/tmp] $ echo "realpath ." > test.sh && chmod +x test.sh
[/tmp] $ /tmp/test.sh
/tmp
[/tmp] $ cd /usr/bin
[/usr/bin] $ /tmp/test.sh
/usr/bin

答案2

我同意迈克尔的观点,但有一个可能很重要的地方是$0参数。

我见过一些脚本可以调查名称$0并根据使用的符号名称执行不同的操作。

答案3

本例中的.表示当前直接工作;链接的路径是不相关的。无论链接类型如何,引用文件进行执行或编辑本质上是相同的,即使有多个链接差异它们之间。

答案4

虽然这不是您要求的,但这可能是您正在寻找的......

您可以使用"$0"它来查找与主脚本位于同一目录中的子脚本。

MYPATH="$(realpath "$0")"
MYDIR="$(dirname "$MYPATH")"
"$MYDIR/otherscript" ...

由于主脚本是符号链接的,因此您需要$0首先使用realpath.虽然如果其 arg 没有目录部分则dirname返回,但在本例中已经将 arg 转换为绝对路径。.realpath

相关内容