我已经在这里找到了一个很好的答案(Test if a command outputs an empty string)
我试图将其应用于rpm -e --test命令。我希望能够在将包放入列表中以便删除之前检查依赖关系。所以我的简单脚本到目前为止看起来像这样:
for PKG in pkg1 pkg2
do
if [[ $(rpm -e --test $PKG) ]]; then
echo "there are dependencies for $PKG"
else
echo "remove $PKG"
fi
done
然而,无论一个包是否具有依赖性,我总是会遇到其他情况。关于如何以不同方式解决这个问题的任何想法?
答案 0 :(得分:4)
rpm -e --test
命令将返回退出代码,指示测试是否成功。比较一下:
# rpm -e --test openssh
error: Failed dependencies:
openssh is needed by (installed) connect-proxy-1.100-12.fc23.x86_64
openssh = 7.2p2-3.fc23 is needed by (installed) openssh-server-7.2p2-3.fc23.x86_64
openssh = 7.2p2-3.fc23 is needed by (installed) openssh-clients-7.2p2-3.fc23.x86_64
openssh = 7.2p2-3.fc23 is needed by (installed) openssh-askpass-7.2p2-3.fc23.x86_64
# echo $?
1
Vs的:
# rpm -e --test figlet
# echo $?
0
所以你可以写:
for pkg in pkg1 pkg2; do
if rpm -e --test $pkg > /dev/null 2>&1; then
echo "remove package"
else
echo "$pkg has dependencies"
fi
done
如果可能,通常最好使用退出代码进行确定 程序的成功或失败(因为输出通常是设计的 是人类消费品,可以从一个版本更改为下一个版本。“