2013-02-27 55 views
0

我有一段代碼通過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文件,但是,我沒有得到的「錯誤」的消息。

任何想法如何解決這個問題?

+0

也許你應該看看'tee'。 – 2013-02-27 14:44:16

+0

當你說你「失去了錯誤輸出」,你的意思是輸出到stderr沒有遇到SSH連接? – 2013-02-27 14:46:33

回答

0

您可能想要使用'tee'命令,它將輸出重定向到文件,同時將其打印在屏幕上。

查看說明書或this article

例子:

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

上面的命令打印目錄在屏幕上,給output.txt的文件列表。

0

你不能在本地重定向遠端stderr嗎?

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

將遠程stderr發送到本地errors.txt,並將遠程字符串'error'發送到本地stdout。

相關問題