【发布时间】:2010-03-24 14:27:51
【问题描述】:
我想将 SSH 调试信息与其他输入分开(并记录)。但是,如果我只是将 stderr 重定向到一个日志文件,我就有可能将来自 SSH 的输出与来自主机上的远程进程的输出结合起来(可能会向 stderr 发送一些东西):
$ ssh -v somemachine 2> file.log
所以,我只想过滤掉那些匹配“debug1”的行:
$ ssh -v somemachine | awk '/debug1/ {print > "file.log"; next} {print}'
到目前为止还不错,但是 ssh 的调试输出到 stderr。所以...
$ ssh -v somemachine 2>& | awk '/debug1/ {print > "file.log"; next} {print}'
再次被挫败!我不想混合标准输出和标准错误。糟糕!
像我这样的孩子会做什么?我正要走命名管道或类似的野性路线,但实际上,我需要知道的只是如何让 awk 仅匹配来自 stderr 的模式。
【问题讨论】:
-
在您将 /debug1/ 引入管道时,您已经超出了管道模型的预期。您是否有原因无法在远程会话上记录标准错误?
-
注意awk只读取命名文件或标准输入;它不读取标准错误。因此,您必须将其读取的内容安排为“ssh”标准错误输出。
-
我只想从 ssh 本身记录 stderr 消息,并且仍然允许看到其他 stderr 消息。我将使用 ssh 远程运行命令:$ ssh -v somemachine somecommand
标签: awk redirect string-matching