我正在編寫一個需要某些命令的規範路徑的腳本。由於可能存在指向實際命令的符號鏈接,因此我用來readlink -f
獲取規範路徑。但我沒有得到我真正想要的東西readlink -f
,我將用以下示例進行解釋:
假設我目前的目錄是:如果我嘗試取得with/home/user/Documents
的路徑,我會得到以下結果:sleep
readlink -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
是規範的,這意味著它假設您的路徑沒有非規範元件。