2014-02-07 49 views
0

我有一個具體的問題,我想解決,我跑system通過perl我認爲在運行bash日誌輸出和錯誤單獨和共同同時

  1. 顯示在both.logstdoutstderr。如果完成,請添加「完成」。
  2. 追加stderrstderr.log
  3. 不要打印出來給終端,除了原有的命令和「完成」如果命令完成。

所以,一旦我們結合stdoutstderr,我們可以再次分開它們嗎?或者我們可以先捕獲stderr,然後將它與stdout結合後?

回答

0

慶典:system("((" . $cmd . " 2>&1 1>&3 | tee -a stderr.log) 3>&1) > both.log; echo done | tee -a both.log"

即使我們使用teestderr.log它不tee錯誤輸出到終端(這是我想要的)。我不完全理解它是如何工作的,但我猜想tee會導致它轉到日誌文件並轉到下一個文件描述符公式。


獎金

我在評論中發現了這個位置:http://wiki.bash-hackers.org/howto/redirection_tutorial 這可以用來做同樣的事情,但所有的輸出也tee d到終端(它不打印「完成「)。

慶典: (($command 2>&1 1>&3 | tee stderr.log) 3>&1) | tee both.log


使用Perl 5.14.1。

0

tcsh單獨在這裏是不夠的。它不支持在沒有標準輸出的情況下重定向stderr。

使用另一個shell或指定的腳本。

更多here


UPDATE:

這能移植到TCSH?

否tcsh不支持不使用stdout重定向標準錯誤。

+0

我也可以訪問bash和zsh,但他們不是首選。更新問題。 – Stuart

+0

已更新的答案。 – shx2

+0

因爲我通過'perl'調用'system'並且我相信它正在使用'bash',所以從問題中刪除'tcsh'。也明顯地修改了這個問題,因爲我不再需要'tee'。 – Stuart

相關問題