bash:检查3个命令是否已安装

时间:2018-07-24 16:13:03

标签: bash

我想检查是否安装了3个命令,并且没有显示警告消息。

我尝试过,但是效果不佳。 有人有主意吗?

代码:

getCurl=`hash curl 2>/dev/null`
getWget=`hash wget 2>/dev/null`
getTar=`hash tar 2>/dev/null`

if ! [ "$getCurl" == "" ] ; [ "$getWget" == "" ] ; [ "$getTar" == "" ]; then
    echo "WARNING: curl, wget or tar not installed!"
fi

1 个答案:

答案 0 :(得分:4)

一种可实现此目的的便携式方法是:

if ! { command -v curl && command -v wget && command -v tar; } >/dev/null 2>&1; then
  echo "One of curl, wget or tar is not installed!" >&2
fi

为什么旧方法被打破了?

  • foo ; bar仅返回bar的退出状态。同样,! true; true返回true,因为非取反的true是序列中的最后一条命令。与;相比,&&在第一次失败时停止(短路)。
  • [ "$foo" == "bar" ]不可移植,因为POSIX test仅保证=,而不保证==作为字符串比较操作。