Bash

獲取命令的規範路徑

  • May 20, 2016

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

假設我的目前目錄是:/home/user/Documents 如果我嘗試獲取路徑,sleepreadlink -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是規範的,這意味著它假定您的路徑沒有非規範組件。

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