我试图避免在 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
请注意,这可能会隐藏真正的错误并使调试变得困难。