Bash
通過符號連結執行 Bash 腳本時,如何獲取它的路徑?
我想獲取 Bash 腳本的路徑,是通過符號連結執行的。
在這種情況下,
$0
is-bash
, whileBASH_SOURCE
是符號連結的路徑。我可以通過一些shell變數、內置shell命令或外部命令獲取腳本的路徑嗎?
BASH_SOURCE
即使腳本通過多個間接級別(多個符號連結)執行,是否將始終保存初始符號連結的路徑?我可以使用
ls
withBASH_SOURCE
來始終檢索腳本的路徑嗎?
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