Bash
獲取命令的規範路徑
我正在編寫一個需要某些命令的規範路徑的腳本。由於可能存在指向實際命令的符號連結,因此我使用它
readlink -f
來獲取規範路徑。但是我沒有得到我真正想要的東西readlink -f
,我將用下面的例子來解釋:假設我的目前目錄是:
/home/user/Documents
如果我嘗試獲取路徑,sleep
我readlink -f
會得到:/home/user/Documents/sleep
我真正想要的是
/bin/sleep
readlink -f "$(type -P sleep)"
或者如果您注重性能:
cpath="$(type -P sleep)"; [ ! -L "$cpath" ] || cpath="$(readlink -f "$cpath")"
使用
readlink -e
(existing) 而不是readlink -f
可以使您免於操作不存在的文件的這種事故。第二個範例假定返回的路徑
type -P
是規範的,這意味著它假定您的路徑沒有非規範組件。