Bash
如何判斷一個包是否是通過 yum 在 bash 腳本中安裝的?
我正在嘗試編寫一個安裝軟體包的腳本,但如果它在腳本稍後的任何時候失敗,則會回滾它安裝的任何內容。當然,如果使用者之前已經安裝了一個包,我不想從它們下面解除安裝它。我的腳本如何判斷一個軟體包以前是否已通過 yum 安裝?
我在一個半相關的StackOverflow 問題上找到了以下內容;我需要的答案實際上並沒有完全回答那裡的問題(並且沒有被選為正確答案)所以我想我會把它貼在這裡讓其他人更容易找到。
yum list installed PACKAGE_NAME
該命令返回一些人類可讀的輸出,但更重要的是返回一個退出狀態碼;0 表示已安裝包,1 表示未安裝包(不檢查包是否有效,因此
yum list installed herpderp-beepbopboop
將返回“1”,就像yum list installed traceroute
您沒有安裝 traceroute 一樣)。您可以隨後檢查“$?” 對於此退出程式碼。由於輸出有點違反直覺,我在包裝函式中使用了@Chris Downs 的“壓縮”版本,以使輸出更“合乎邏輯”(即 1=已安裝 0=未安裝):
function isinstalled { if yum list installed "$@" >/dev/null 2>&1; then true else false fi }
用法將是
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
編輯:
return
用呼叫替換語句true
,false
這有助於使函式更具可讀性/直覺性,同時返回 bash 期望的值(即 0 表示真,1 表示假)。如果您只是在腳本中檢查一個包,那麼
yum list installed
直接測試可能會更好,但是(恕我直言)該函式更容易理解正在發生的事情,並且它的語法比yum
所有重定向更容易記住來抑制它的輸出。