当通过符号链接执行 Bash 脚本时,如何获取该脚本的路径?

当通过符号链接执行 Bash 脚本时,如何获取该脚本的路径?

我想获取 Bash 脚本的路径,即通过符号链接执行该脚本时的路径。

在本例中,$0is -bash,而BASH_SOURCE是符号链接的路径。

我可以通过一些 shell 变量、内置 shell 命令或外部命令获取脚本的路径吗?

是否BASH_SOURCE始终保留初始符号链接的路径,即使脚本是通过多个间接级别(多个符号链接)执行的?

我可以使用lswithBASH_SOURCE来始终检索脚本的路径吗?

答案1

realpath或者readlink -f来自 GNU coreutils 可能会有所帮助:

$ ls -l foo.sh bar.sh whereami.sh
lrwxrwxrwx 1 ilkkachu ilkkachu  6 Jul 31 19:01 bar.sh -> foo.sh*
lrwxrwxrwx 1 ilkkachu ilkkachu 11 Jul 31 19:01 foo.sh -> whereami.sh*
-rwxr-xr-x 1 ilkkachu ilkkachu 36 Jul 31 19:02 whereami.sh*
$ cat whereami.sh
#!/bin/bash
echo "$BASH_SOURCE"
realpath "$BASH_SOURCE"
$ ./bar.sh
./bar.sh
/tmp/whereami.sh

相关内容