如何丢弃 ssh 命令中不需要的失败消息?

如何丢弃 ssh 命令中不需要的失败消息?

我试图避免在 ssh 命令期间未找到 lun 时将消息打印到收到的控制台。 SSH 用于 NetApp 文件管理器。命令正在 Solaris 10 主机上运行。

这是我正在执行的一些代码:

for filer in <list>
do
echo $filer
ssh $filer lun show <lunpath> |grep vol
...
done

如果找到 LUN,则代码可以正常工作,但如果未找到 LUN,SSH 命令将返回“lun show:不存在这样的 LUN”

我已经尝试了多个 grep 和 egrep 命令,包括 -v 变体...但我仍然收到打印到控制台的“lun show:不存在这样的 LUN”消息。

我需要做什么才能跳过将此行打印到控制台?

答案1

较新的 ssh 似乎从远程主机带回 stdout 和 stderr 作为两个不同的流。

要创建结合 stdout 和 stderr 的过滤器,您可以执行以下操作:

ssh $filer lun show <lunpath> 2>&1 |grep vol

要将 stderr 发送到单独的文件,您可以执行以下操作:

ssh $filer lun show <lunpath> 2>lun.show.stderr |grep vol
if [ -s lun.show.stderr ]; then
   # there was some stderr output
   grep -v "No such LUN exists" lun.show.stderr
fi

丢弃 stderr:

ssh $filer lun show <lunpath> 2>/dev/null | grep vol

请注意,这可能会隐藏真正的错误并使调试变得困难。

相关内容