故事是這樣的,我寫了一個shell script,裡面執行到哪裡就echo出來(也就是log..)以便我debug,某天我想要把run shell script 的log重導到檔案,但是我卻想同時想看"熱騰騰"的message echo到螢幕上。
例如: $ ./myShellScript.sh > log <--此時就是將stdout重導到log這個檔案
我們知道stdout最終會導向螢幕,問題就來了,因為 ">" 符號本來就是將stdout的重導到檔案上,所以很自然螢幕就不會顯示任何東西啦,於是我想到
$ ./myShellScript.sh > log ; cat log
就這樣利用cat指令將log再印出來一次,但是這是shell script都做完了,最後才印出來,好像還不夠給力,因為我想要在script執行的同時,可以立即看到echo出來的message而且又能重導到檔案。
登登,這裡介紹一個好用的指令 tee,它就能達到我想要的需求囉,
例: $ ./myShellScript.sh | tee log
使用pipe接起來給tee指令,後面則是你要重導到的檔案名
假設想要連stderr也一起併入,則
例: $ ./myShellScript.sh 2>&1 | tee log
參考資料:how to redirect output to a file and stdout
沒有留言:
張貼留言