如何重定向错误输出,仍然可以在标准输出上有错误通知?

时间:2013-02-27 14:41:58

标签: bash command-line awk pipe stderr

我有一段代码通过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文件中,但是,我没有收到“错误”消息。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

查看手册或this article

示例:

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

上面的命令打印屏幕上的目录列表和output.txt文件。

答案 1 :(得分:0)

您是否无法在本地重定向远程stderr?

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

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