![Unix如何判斷一個程式是否可以執行](https://rvso.com/image/617815/Unix%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%B7%E4%B8%80%E5%80%8B%E7%A8%8B%E5%BC%8F%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9F%B7%E8%A1%8C.png)
我正在編寫一個腳本來創建來源環境。處理 PATH 部分很簡單。那麼,當程式的路徑被加入PATH中時,如何檢查它是否可以正確執行?使用which
是不夠的,因為它只是檢查可執行檔是否存在,而不是運行它。我現在得到的是檢查程式的版本(即find -version
)並檢查返回訊息是否包含“ command not found
”。這並不理想。有一個更好的方法嗎?
答案1
我認為沒有一種理想的方法可以做你想做的事。正如馬丁所說,您可以檢查可執行位是否已設置,但這並不能確認它是否會實際運作。
您可以做的一件事是嘗試運行程序,而不是從程序本身查找特定文本,而是查看變數$?
。這將返回程式的退出狀態(通常為 0 表示正常)或(在 CentoOS 系統上我必須手動)127 表示未找到文件,例如
find --version
if [[ $? == 127 ]]
then
exit 1
fi
沒有理想方法的原因是退出狀態 0 表示 OK 只是常規情況,如果程式運行但遇到錯誤,則可能會傳回不同的退出狀態。這可能對您有用,直到某些東西運行並返回退出狀態 127 以指示某些錯誤情況。
答案2
您可以使用-x
操作員測試檔案上是否設定了可執行標誌。但它不會告訴您可執行檔是否會實際運行。