Bash

通過符號連結執行 Bash 腳本時,如何獲取它的路徑?

  • July 31, 2020

我想獲取 Bash 腳本的路徑,是通過符號連結執行的。

在這種情況下,$0is -bash, whileBASH_SOURCE是符號連結的路徑。

我可以通過一些shell變數、內置shell命令或外部命令獲取腳本的路徑嗎?

BASH_SOURCE即使腳本通過多個間接級別(多個符號連結)執行,是否將始終保存初始符號連結的路徑?

我可以使用lswithBASH_SOURCE來始終檢索腳本的路徑嗎?

realpathreadlink -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

引用自:https://unix.stackexchange.com/questions/602248