shell中如何判斷某個命令是否存在
阿新 • • 發佈:2018-12-10
首先要說明的是,不要使用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; }