Bash

在 Debian 上安裝包的腳本的幫助,僅當未安裝時

  • November 14, 2022

我正在製作一個腳本來建構一個 Debian 格式 (.deb) 的 git 包。這個包需要那些包 cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers 等。

所以我把這些線

for file in cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers libgl-dev libegl-dev libx11-dev libxtst-dev libglu1-mesa-dev libxcb-keysyms1-dev libxcb-glx0-dev libx11-xcb-dev; do apt -y install $file;done

我的問題是,如何檢查包是否已經安裝,如果沒有安裝則安裝?像這樣的東西

dpkg -l packagename

如果已安裝,請轉到下一步,如果不使用 apt -y install。謝謝

mk-build-deps您應該在包的控製文件中列出建構依賴項並使用(或任何解析包的建構工具,例如 pbuildersbuild) ,而不是編寫自己的腳本來執行此操作。有關詳細資訊,請參閱dpkg-checkbuilddeps 檢測到的自動安裝未滿足的建構依賴項

如果您不想這樣做,請描述所需的狀態並讓我們apt處理:

sudo apt-get install --no-install-recommends cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers libgl-dev libegl-dev libx11-dev libxtst-dev libglu1-mesa-dev libxcb-keysyms1-dev libxcb-glx0-dev libx11-xcb-dev

apt不會重新安裝已安裝的軟體包,但它會升級系統上配置的儲存庫中具有較新候選版本的任何軟體包(可以使用該--no-upgrade選項禁用)。

如果你真的想編寫自己的腳本,你可以dpkg -l為每個包執行,並過濾^ii——不匹配的包需要安裝:

for package in …; do
   if ! dpkg -l "$package" | grep -q ^ii; then
       sudo apt-get install --no-install-recommends "$package"
   fi
done

--no-install-recommends跳過安裝弱依賴項,這是建構依賴項所需的。)

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