如何重定向错误输出并且仍然能够在标准输出上获得错误通知?

Posted

技术标签:

【中文标题】如何重定向错误输出并且仍然能够在标准输出上获得错误通知?【英文标题】:How to redirect error output and still be able to have error notification on standard output? 【发布时间】:2013-02-13 10:08:32 【问题描述】:

我有一段代码通过 ssh 执行命令。该命令更像是这样的:

( cd /home/some/path && ./program ) || echo 'error'

多亏了这一点,如果执行失败,我会在标准输出上得到“错误”,并且可以在我的初始代码中将其解释为失败。但是,在这种方法中,我丢失了错误输出(当我通过 ssh 连接调用程序时)。我希望能够将错误输出保存到某个错误日志文件中(如果我可以使用 awk 用一些日期和时间对其进行注释,那将是完美的)并且在调用时仍然能够在输出上获得“错误”失败了。

我想出了类似的东西:

( cd /home/some/path && ./program 2>&1 | awk ' print strftime("%Y-%m-%d %H:%M:%S"), $0; ' > error.log) || echo 'error'

它将错误输出保存到 error.log 文件,但是,我没有收到“错误”消息。

有什么办法解决这个问题吗?

【问题讨论】:

或许你应该看看tee 当您说“丢失错误输出”时,您的意思是输出到stderr 没有经过ssh 连接? 【参考方案1】:

您可能想要使用“tee”命令,它将输出重定向到文件,同时将其打印到屏幕上。

查看手册或this article。

例子:

$ ls -al 2>&1 | tee output.txt

以上命令在屏幕上打印目录列表并输出到 output.txt 文件。

【讨论】:

【参考方案2】:

你不能在本地重定向远程stderr吗?

ssh remotehost '( cd /home/some/path && ./program ) || echo error' 2>errors.txt

将远程 stderr 发送到本地 errors.txt 并将远程字符串 'error' 发送到本地 stdout。

【讨论】:

以上是关于如何重定向错误输出并且仍然能够在标准输出上获得错误通知?的主要内容,如果未能解决你的问题,请参考以下文章

怎样去掉提示:nohup:重定向标准错误到标准输出

在 Linux 上使用 Bash 将所有输出重定向到文件? [复制]

如何获取shell命令输出的错误信息

在 Bash 中重定向标准错误和标准输出 [重复]

Linux下Shell重定向

LINUX 标准错误输出重定向