我想检查是否安装了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
答案 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
仅保证=
,而不保证==
作为字符串比较操作。