2017-04-14 33 views
1

我試圖組成一個命令,將被彎曲,使其每隔幾分鐘的監控服務器腳本的穩定性(腳本實際路徑替換):egrep的輸出不轉發所有的行到文件

while :; do date +"%T" >> monitor.txt; time curl -Is http://googel.com | egrep "HTTP|m.\." >> monitor.txt; echo ================ >> monitor.txt; sleep 30; done 

問題是,出於某種原因,部分輸出不會被轉發到文件monitor.txt。因此,文件中包含以下行:

$ cat monitor.txt 
19:39:10 
HTTP/1.1 301 Moved Permanently 
================ 
19:39:40 
HTTP/1.1 301 Moved Permanently 
================ 

..while時間的細節去默認輸出:

$ while :; do date +"%T" >> monitor.txt; time curl -Is http://googel.com | egrep "HTTP|m.\." >> monitor.txt; echo ================ >> monitor.txt; sleep 30; done 

real 0m0.075s 
user 0m0.005s 
sys  0m0.003s 

real 0m0.106s 
user 0m0.004s 
sys  0m0.005s 

可否請你指出,我缺少什麼嗎?基本上我會在後臺運行這個命令,並檢查monitor.txt的結果。

預先感謝您!

+0

'時間'[適用於整個管道](https://www.gnu.org/software/bash/manual/bashref.html#Pipelines),而不僅僅是第一條命令。 – melpomene

回答

1

time命令將其輸出發送到stderr而不是stdout。您的重定向僅影響stdout,所以time輸出結束了去 到控制檯。

要增加混淆,bash也有一個內置的time命令,其中 有點複雜的重定向。如果使用/usr/bin/time而不是 time,則應該能夠使用2>&1語法重定向其輸出。 或者,如果您更喜歡bash內置版本的命令,則可以使用this answer以 的方式重定向其輸出。

+0

謝謝你指出吉姆。真的很感激它。 我試圖做一些關於將stderr和stdout轉發到文件的研究,但是下面的選項(在此處推薦)仍然會給出與我原始命令相同的結果: '&> monitor.txt'和 '2>&1 | tee -a monitor.txt' 所以我恐怕我已經回到了我開始的地步。 –

+0

@尼克,你是對的...我已經用一些額外的細節更新了我的答案。 –

+0

非常感謝Jim!我剛剛從我身邊得到類似的帖子=) http://stackoverflow.com/questions/13356628/is-there-a-way-to-redirect-time-output-to-file-in-linux 所以下面的語法就像一個魅力: $ while:;做日期+「%T」>> monitor.txt; {time curl - 是http://googel.com | egrep「HTTP | m。\」。 ; } 1 >> monitor.txt 2 >> monitor.txt; echo ================ >> monitor.txt;睡覺30; DONE –