1. 程式人生 > >shell中如何判斷某個命令是否存在

shell中如何判斷某個命令是否存在

首先要說明的是,不要使用which來進行判斷,理由如下:

1.which非SHELL的內建命令,(用type來判斷某個命令是否為內建命令。)用起來比內建命令的開銷大,並且非內建命令會依賴平臺的實現,不同平臺的實現可能不同。

2.很多系統的which並不設定退出時的返回值,即使要查詢的命令不存在,which也返回0

3.很多linux發行版上的which會做一些邪惡的事情,比如改變輸出結果甚至會接入到包管理器中。

用下明幾個命令:

$ command -v foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }
$ type foo >/dev/null 2>&1 || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }
$ hash foo 2>/dev/null || { echo >&2 "I require foo but it's not installed.  Aborting."; exit 1; }