Bash
通過符號連結執行時獲取目前腳本的路徑
我有一個由幾個目錄組成的實用程序,其中包含一些 bash 腳本和支持文件,這些文件將部署到多台機器上,可能在每台機器上的不同目錄中。腳本需要能夠引用相對於它們自身的路徑,因此我需要能夠獲取目前正在執行的文件的路徑。
我知道
dirname $0
直接呼叫我的腳本時完美執行的習語。不幸的是,希望能夠從完全不同的目錄創建到這些腳本的符號連結,並且仍然具有相對路徑邏輯工作。整體目錄結構範例如下:
/ |-usr/local/lib | |-foo | | |-bin | | | |-script.sh | | |-res | | | |-resource_file.txt |-home/mike/bin | |-link_to_script (symlink to /usr/local/lib/foo/bin/script.sh)
如何可靠地引用
/usr/local/lib/foo/res/resource_file.txt
它script.sh
是否由/usr/local/lib/foo/bin/script.sh
or呼叫~mike/bin/link_to_script
?
試試這個作為通用解決方案:
DIR="$(cd "$(dirname "$0")" && pwd)"
在以下符號連結的特定情況下,您也可以這樣做:
DIR="$(dirname "$(readlink -f "$0")")"
一條線:
cd $(dirname $([ -L $0 ] && readlink -f $0 || echo $0))