Bash

如何判斷一個包是否是通過 yum 在 bash 腳本中安裝的?

  • April 21, 2020

我正在嘗試編寫一個安裝軟體包的腳本,但如果它在腳本稍後的任何時候失敗,則會回滾它安裝的任何內容。當然,如果使用者之前已經安裝了一個包,我不想從它們下面解除安裝它。我的腳本如何判斷一個軟體包以前是否已通過 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用呼叫替換語句truefalse這有助於使函式更具可讀性/直覺性,同時返回 bash 期望的值(即 0 表示真,1 表示假)。

如果您只是在腳本中檢查一個包,那麼yum list installed直接測試可能會更好,但是(恕我直言)該函式更容易理解正在發生的事情,並且它的語法比yum所有重定向更容易記住來抑制它的輸出。

引用自:https://unix.stackexchange.com/questions/122681