假设 /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