我有一个 bash 文件,其中包含要使用 apt install 为新 Ubuntu 安装安装的软件包列表,但是,列表中并非所有软件包都会安装。脚本中会根据需要包含存储库。
我尝试过以下两种方法:
方法 1:
apt install [pkg1] [pkg2] [pkg3] ... [pkgn]
方法2-(伪代码):
String pkgs_list[] = {"pkg1" "pkg2" "pkg3" "pkgn"}
for each pkg in pkg_list {
if pkg exists then {
"do nothing"
else
apt install pkg
}
}
以下是完整的 bash 代码:
#***********************#
#*** Keys ***#
#***********************#
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
wget -O - https://dl.sinew.in/keys/enpass-linux.key | apt-key add -
wget -nc https://dl.winehq.org/wine-builds/Release.key | apt-key add -
#***********************#
#*** Repositories ***#
#***********************#
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list
echo "deb http://repo.sinew.in/ stable main" > \
/etc/apt/sources.list.d/enpass.list
add-apt-repository -y ppa:webupd8team/gnome3 #This is for gnome tweak tool extensions (source: https://www.wikihow.com/Change-Themes-on-Ubuntu-with-Gnome-Tweak-Tool)
add-apt-repository -y ppa:notepadqq-team/notepadqq
add-apt-repository https://dl.winehq.org/wine-builds/ubuntu/
apt -y update
#WinHQ enables 32bit architecture
dpkg --add-architecture i386
#***********************#
#*** apt install ***#
#***********************#
#apt -y install \
# nemo \
# google-chrome-stable \
# notepadqq dconf-editor \
# nfs-common \
# enpass \
# virtualbox \
# virtualbox-guest-additions-iso \
# gnome-tweak-tool \
#gnome-shell-extensions-user-themes \
# vlc \
# gimp \
# winehq-stable \
# synaptic
declare -a alist=("nemo"
"google-chrome-stable"
"notepadqq"
"dconf-editor"
"nfs-common"
"enpass"
"virtualbox"
"virtualbox-guest-additions-iso"
"gnome-tweak-tool"
"vlc"
"gimp"
"winehq-stable"
"synaptic"
"usb-creator-gtk"
"libreoffice"
"chromium-browser"
"thunderbird"
"shotwell"
"gnome-calendar")
for application in "${alist[@]}"
do
dpkg -l $application
if [ $? = '0' ]; then
echo "***************************************************************************"
echo "*****Application "$application" package is installed, no action taken.*****"
echo "***************************************************************************"
elif [ $? = '1' ]; then
echo "******************************************"
echo "*****Installing package $application.*****"
echo "******************************************"
#Add an if to match dock favorites and add to the dock .desktop file
apt install $application -y
fi
done
以下是脚本运行后的应用程序列表及其状态:
- 尼莫 -好的
- google-chrome-稳定版 -好的
- notepadqq -没有安装
- dconf-编辑器-好的
- nfs-通用-没有安装
- 通過 -好的
- 虚拟盒 -好的
- virtualbox-guest-additions-iso -不知道
- gnome-tweak-tool -没有安装
- 可变电流表好的
- 瘸子 -没有安装
- winehq-稳定版 -没有安装
- 突触 -没有安装
- usb-creator-gtk -没有安装
- libreoffice -好的
- chromium 浏览器 -没有安装
- 雷鸟 -没有安装
- 肖特韦尔 -没有安装
- gnome 日历 -没有安装
我可以为每个需要的包裹提供更多信息。
感谢您的帮助。
编辑
使用该命令生成的日志文件$ sudo ./my_script.sh >> my_script.log
太大,因此我将发布我认为的问题,然后我们可以从那里开始。
下面是未安装 gimp 的输出。当我的代码使用命令检查软件包是否已安装时,dpkg -l [package_name]
它在检查 gimp 和其他软件包时返回以下内容。
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
un gimp <none> <none> (no description available)
所有未安装的软件包都返回了版本和体系结构,这<none>
告诉我没有安装软件包,对吗?但是当 bash 脚本运行时,命令返回“0”,使我的语句相信软件包已安装,但根据 dpkg 的说法,情况似乎并非如此。相反,dpkg 应该返回类似以下内容:...
$ dpkg -l package
dpkg-query: no packages found matching package
...当未安装包时。
我不明白这里dpkg
返回发布的信息是怎么回事。这是什么意思?发生了什么?
谢谢,
编辑
此外,如果我尝试删除包,apt
我会得到:
$ sudo apt autoremove gimp
[sudo] password for alex2wr:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'gimp' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.