2017-05-30 62 views
0

我正在嘗試修改某人在shell中爲unix創建的腳本。此腳本主要用於在沒有人爲交互的支持服務器上運行,但是我需要製作另一個腳本以允許用戶輸入信息。所以,它只是修改爲舊版本的用戶輸入。但我遇到的最大問題是試圖將錯誤日誌和回聲保存在日誌文件中。該腳本有很多,但我希望在終端上顯示這些腳本,並將它們發送到指定的日誌文件中,以便日後查看。向終端和文件日誌發送回顯和錯誤

什麼我是這樣的:

exec 1> ${LOG} 2>&1 

這條線幾乎都發送到日誌文件。這很好,但我也有人試圖在腳本中輸入信息,並且它將所有內容發送到日誌文件,包括提示所需的回顯。這一行也在腳本的開頭,但更多地閱讀stderr和stdout消息。我想:

exec 2>&1 1>>${LOG} 
exec 1 | tee ${LOG} But only getting error when running it this "./bash_pam.sh: line 39: exec: 1: not found" 

我都去了現場such as this來解決這個問題,但我不理解爲什麼它不打印兩者。我插入它的方式只是將它發送到日誌位置而不是發送給終端,或者發送給終端,但是日誌中沒有任何東西被持久化。

編輯:一些解決方案,爲此提到,某些修復程序將在bash中工作,但不在/ bin/sh中。

+0

如果我理解正確,你只希望在stdout中顯示錯誤並記錄到文件中? –

+0

好吧,我希望回聲來到終端,但同時,想要發送到日誌位置的回聲和錯誤。 –

+0

「回聲」你的意思是沒有錯誤輸出,這是什麼不清楚。 –

回答

0

如果你想所有的輸出到打印到控制檯,同時也被印到logfile.txt你會在你的腳本運行此命令:

bash your_script.sh 2>&1 | tee -a logfile.txt 

或文件中調用它:

<bash_command> 2>&1 | tee -a logfile.txt 

要追加到logfile.txt而不是覆蓋,請將-a選項添加到tee

+3

這將覆蓋終端上打印的每條新行的'logfile.txt'。您需要'tee -a'將新行添加到日誌文件中。 –

+0

@GeorgeVasiliou我不確定OP是否要追加,但我會將其添加爲備註 – TheGirrafish