取得命令的規範路徑

取得命令的規範路徑

我正在編寫一個需要某些命令的規範路徑的腳本。由於可能存在指向實際命令的符號鏈接,因此我用來readlink -f獲取規範路徑。但我沒有得到我真正想要的東西readlink -f,我將用以下示例進行解釋:

假設我目前的目錄是:如果我嘗試取得with/home/user/Documents 的路徑,我會得到以下結果:sleepreadlink -f

/home/user/Documents/sleep

我真正想要的是/bin/sleep

答案1

readlink -f "$(type -P sleep)"

或者如果您注重績效:

cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"

使用readlink -e(existing) 代替可以避免readlink -f這種操作不存在文件的事故。

第二個範例假設返回的路徑type -P是規範的,這意味著它假設您的路徑沒有非規範元件。

相關內容