2013-02-21 71 views
0

我想記錄我的腳本所做的更改到日誌文件。在很高的層次上,我的腳本具有功能,我希望能夠將這些信息記錄到文件中。我使用了「tee -a」,但是這在許多方面搞砸了功能。bash直接輸出到日誌文件除了stdout

有沒有簡單的方法來完成這項任務?

更新:下面更正錯字

 
function1(){ ... } 
function2(){ ... } 
#main 
function1 | tee -a /tmp/logfile 
function2 | tee -a /tmp/logfile 

回答

1

(編輯,以反映問題編輯) 您可以將發球臺到函數的定義:

function() { { ...<original function definition goes here>; } | tee -a output; } 

,這樣你就不需要調用三通每次你調用這個函數。顯然,如果函數修改文件描述符,則需要做更多的工作。另外,請記住,這會更改緩衝區。如果從函數1中調用的命令對於它們的標準輸出有一個tty,那麼它們可能會對它們的輸出進行行緩衝,但是如果它們的標準輸出是一個管道(如果管道連接到tee),輸出將被塊緩衝。這可能是你所看到的差異的根源。而且,這僅捕獲一個文件描述符的輸出。也許你有命令寫給stderr。您將需要提供更多關於管道改變腳本行爲方式的細節。

+0

我犯了一個錯字。該劇本沒有「發球」 – bubbly 2013-02-21 17:59:01