【发布时间】:2016-04-06 15:10:50
【问题描述】:
我需要一个 bash 行来检查 ubuntu 软件包是否需要升级。
例如,我想使用 dpkg 或 apt-get 命令检查软件包“firefox”是否需要升级。
假设示例:
# Hypothetical example pseudo-code
if [[ $(firefox_needs_upgrade) ]]; then echo "Firefox needs upgrading";fi
【问题讨论】:
我需要一个 bash 行来检查 ubuntu 软件包是否需要升级。
例如,我想使用 dpkg 或 apt-get 命令检查软件包“firefox”是否需要升级。
假设示例:
# Hypothetical example pseudo-code
if [[ $(firefox_needs_upgrade) ]]; then echo "Firefox needs upgrading";fi
【问题讨论】:
这应该适合你:
#!/bin/bash
PACKAGE="firefox"
TMP_FILE="/tmp/upgrade_list"
apt-get -yqq update
apt-get -sqq upgrade | grep Inst > ${TMP_FILE}
grep -qi ${PACKAGE} ${TMP_FILE}
if [ $? == 0 ]
then
echo "${PACKAGE} needs to be upgraded"
fi
【讨论】:
以下命令会对您有所帮助:-
/usr/lib/update-notifier/apt-check --人类可读
或
cat /var/lib/update-notifier/updates-available
更多详情,您可以查看以下链接:-
感谢和问候,
阿洛克·撒克
【讨论】:
apt_needs_upgrade() {
NEEDS_UPGRADE=$(/usr/lib/update-notifier/apt-check -p 2>&1 >/dev/null | grep "^$1$" | wc -l)
if [ "$NEEDS_UPGRADE" == 1 ]; then
return 0; # 0 means true in bash!!!
else
return 1; # false
fi;
}
if apt_needs_upgrade "firefox"; then
echo "Needs upgrading"
else
echo "No need to upgrade"
fi;
【讨论】:
好的,用经过测试的代码编辑了我的答案。这可能是一种更漂亮的方式:
#retrieving info about the package
dpkg -l $1 >/dev/null
if [ $? -ne 0 ]
then
echo "$1 not installed or issue retrieving informations"
exit
else
#We check if pkg is upgradable
UPGRADABLE=$(apt-get -s upgrade -u | egrep -c "^Conf $1 |^Inst $1 ")
if [ $UPGRADABLE -gt 0 ]
then
echo "$1 need an upgrade"
else
echo "$1 up to date"
fi
fi
用法:
# /tmp/check.sh openssh-server
openssh-server need an upgrade
【讨论】:
apt-get 退出错误意味着需要升级,以及为什么您使用如此繁琐的表达式而不是简单的if apt-get ...;