Shell

我可以使用 type 來檢查任意名稱是否是有效的命令名稱嗎?

  • January 8, 2014

bash 內置type可用於此目的,方法是檢查其退出狀態:

Exit Status:
Returns success if all of the NAMEs are found; fails if any are not found.

它的便攜性如何?POSIX 規範對以下的退出狀態不太清楚type

EXIT STATUS    
   The following exit values shall be returned:    
    0 Successful completion.
   >0 An error occurred.

資料來源: http: //pubs.opengroup.org/onlinepubs/009695399/utilities/type.html

描述

類型實用程序應指示每個參數如果用作命令名稱將如何解釋。

(…)

應返回以下退出值:

0 順利完成。

>0 發生錯誤。

“成功完成”意味著參數可以解釋為命令名稱,在這種情況下命令查找將成功。錯誤意味著不能將參數解釋為命令名稱,在這種情況下,命令查找將失敗。

的返回狀態type是檢查命令名稱是否有效或盡可能接近的完全 POSIX 可移植方式。有些舊系統type在無效命令上返回 0(例如 OSF1 V3,但我認為 OSF1 V4 是 POSIX 兼容的,至少在 shell 環境處於 POSIX 模式時(BIN_SH=xpg4)),但 POSIX 兼容系統僅在成功時返回 0 .

你不能依賴的type是輸出格式,或者輸出是在 stdout 還是 stderr 上。

type如果您嘗試實際執行程序,則無法保證結果匹配。在此期間可能已添加或刪除了執行檔,或者可能由於文件無效或記憶體不足而無法載入。但是,如果您只是想查看命令是否存在而不關心邊緣情況,if type somecommand >/dev/null 2>/dev/null; …那麼這是正確的方法。

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