在 if 条件下将错误消息重定向到 /dev/null

在 if 条件下将错误消息重定向到 /dev/null

我有以下if声明:

if [ "$sourcelast" = "$maxhostlast" ] || [ "$sourcelast" = "$minhostlast" ] || [ "$sourcelast" < "$maxhostlast" ] || [ "$sourcelast" > "$minhostlast" ] ;then ... fi

/dev/null现在我希望每次发生错误时都会发送错误消息。

我怎样才能做到这一点?

答案1

在继续之前,您必须修复语法。><是 shell 重定向运算符,而不是旧 test 中的比较运算符[...]在某些 shell 中,您可以转义它们\<\>存档字符串比较,或使用新的测试[[...]]

在这种情况下,听起来您想要进行数字比较,因此您应该坚持使用标准运算符-lt, -le, -gt, -ge

if [ "$sourcelast" = "$maxhostlast" ]   ||
   [ "$sourcelast" = "$minhostlast" ]   ||
   [ "$sourcelast" -lt "$maxhostlast" ] ||
   [ "$sourcelast" -gt "$minhostlast" ]
then
  : "Do something"
fi

要重定向所有条件下的所有错误消息,您只需将它们包装在子 shell 中:

if (
     [ "$sourcelast" = "$maxhostlast" ]   ||
     [ "$sourcelast" = "$minhostlast" ]   ||
     [ "$sourcelast" -lt "$maxhostlast" ] ||
     [ "$sourcelast" -gt "$minhostlast" ]
   ) 2>/dev/null
then
  : "Do something"
fi

相关内容