假设我们只有 1 个参数
host $1
我如何检查上述命令是否会给我答案或:
Host $1 not found (NXDOMAIN)
我不想显示未找到的错误,而是只想显示-
答案1
host
如果无法解析您的输入,将退出 1,因此您可以使用 if 构造:
if ! host "$1" | grep -v 'not found'; then
printf '%s\n' '-'
fi
我们用来!
测试命令是否失败(因为我假设您只想在命令通过时正常打印输出)。 将错误host
发送not found
到 stdout 而不是 stderr,因此我们不能只是隐藏 stdout。这就是为什么我将主机命令通过管道传递到grep -v 'not found'
其中,如果存在未找到的错误,并且仍然退出 1,则会隐藏该错误,从而导致 if 构造打印-
。如果没有找到not found
就会退出 0。
答案2
退出状态就足够了吗?$?
即使您使输出静音,您也可以合并上一个命令的退出状态。对于host
退出状态,0 表示成功,1 表示错误
[17:54] [ws ~] $ host 127.0.0.112 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
1
[17:54] [ws ~] $ host 127.0.0.1 1>&2 >/dev/null
[17:54] [ws ~] $ echo $?
0