Shell我可以使用
我可以使用 type
來檢查任意名稱是否是有效的命令名稱嗎?
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; …
那麼這是正確的方法。