我想提供一个功能来检查程序或库是否已安装。
那就是我现在要做的:
dpkg --status software-properties-common | grep -q not-installed
if [ $? -eq 0 ]; then
sudo apt-get install -y software-properties-common
fi
我想要什么:
isPackageNotInstalled() {???}
if [ $(isPackageNotInstalled 'software-properties-common') ]; then
sudo apt-get install -y software-properties-common
fi
任何帮助将不胜感激。
答案 0 :(得分:1)
我看到dpkg --status有多个返回值,这些返回值可能暗示了部分安装或挂起的软件包。我的想法是使用它的返回码,而不是检查任何特定的文本。全面披露-我现在无法使用实际的dpkg尝试此操作,但可以快速尝试一下。...
因此,一个简单的命令:
if ! (dpkg --status "..." &>/dev/null); then ...
或更简单地说:
dpkg --status "..." &>/dev/null || sudo apt-get ...
并将其放入函数中
function isPackageNotInstalled() {
! dpkg --status "$1" &>/dev/null
}
然后使用它:
if isPackageNotInstalled "..."; then ...
或者如上所述:
isPackageNotInstalled "..." && sudo apt-get ...
希望这会有所帮助。
答案 1 :(得分:0)
示例脚本,其中包括用于检查和安装缺少的软件包的功能:
#!/bin/bash
isPackageNotInstalled() {
dpkg --status $1 &> /dev/null
if [ $? -eq 0 ]; then
echo "$1: Already installed"
else
sudo apt-get install -y $1
fi
}
isPackageNotInstalled $1
将其另存为script
,用法为./script package_name
。
man dpkg
:
EXIT STATUS
0 The requested action was successfully performed. Or a check or
assertion command returned true.
1 A check or assertion command returned false.
2 Fatal or unrecoverable error due to invalid command-line usage,
or interactions with the system, such as accesses to the
database, memory allocations, etc.
答案 2 :(得分:0)
基于已经选择的答案,该脚本也可以在#archlinux中使用。
isPackageNotInstalled() {
pacman -Ss $1 &&> /dev/null
if [ $? -eq 0 ]; then
echo "$1: Already installed"
else
sudo pacman -S $1
fi
}
isPackageNotInstalled $1
对于你来说
isPackageNotInstalled() {
yaourt -Ss $1 &&> /dev/null
if [ $? -eq 0 ]; then
echo "$1: Already installed"
else
yaourt -S $1
fi
}
isPackageNotInstalled $1