Bash

通過符號連結執行時獲取目前腳本的路徑

  • April 6, 2022

我有一個由幾個目錄組成的實用程序,其中包含一些 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.txtscript.sh是否由/usr/local/lib/foo/bin/script.shor呼叫~mike/bin/link_to_script

試試這個作為通用解決方案:

DIR="$(cd "$(dirname "$0")" && pwd)"

在以下符號連結的特定情況下,您也可以這樣做:

DIR="$(dirname "$(readlink -f "$0")")"

一條線:

cd $(dirname $([ -L $0 ] && readlink -f $0 || echo $0))

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