rpm --test永远不会返回非空字符串?

时间:2016-04-27 18:34:26

标签: linux bash rpm

我已经在这里找到了一个很好的答案(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

然而,无论一个包是否具有依赖性,我总是会遇到其他情况。关于如何以不同方式解决这个问题的任何想法?

1 个答案:

答案 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

如果可能,通常最好使用退出代码进行确定 程序的成功或失败(因为输出通常是设计的 是人类消费品,可以从一个版本更改为下一个版本。“