[問題] script如何導出stderr
我想將stderr的訊息額外導到檔案,
也就是說error訊息除了輸出到螢幕之外
,還要輸出到檔案。
如果是stdout的話,可以使用tee來達成,
但stderr要怎麼做呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.236.62
→
10/28 07:23, , 1F
10/28 07:23, 1F
→
10/28 07:23, , 2F
10/28 07:23, 2F
→
10/28 07:41, , 3F
10/28 07:41, 3F
→
10/28 07:42, , 4F
10/28 07:42, 4F
→
10/28 07:42, , 5F
10/28 07:42, 5F
→
10/28 07:43, , 6F
10/28 07:43, 6F
→
10/28 07:47, , 7F
10/28 07:47, 7F
→
10/28 07:48, , 8F
10/28 07:48, 8F
推
10/28 09:25, , 9F
10/28 09:25, 9F
推
10/28 09:46, , 10F
10/28 09:46, 10F
→
10/28 23:47, , 11F
10/28 23:47, 11F
→
10/28 23:47, , 12F
10/28 23:47, 12F
→
10/29 00:03, , 13F
10/29 00:03, 13F
→
10/29 00:04, , 14F
10/29 00:04, 14F
→
10/29 00:06, , 15F
10/29 00:06, 15F
→
10/29 00:09, , 16F
10/29 00:09, 16F
myprogram 2>output-file ; tail -f output-file
因為我要導出make的stderr訊息
但是除了錯誤訊息會到stderr,警告訊息也會,
且只有error時,才會停止,警告不會。
所以上面的方法不能用。
※ 編輯: tsaiminghan 來自: 59.121.233.249 (10/29 02:21)
→
10/29 08:31, , 17F
10/29 08:31, 17F
→
10/29 08:31, , 18F
10/29 08:31, 18F
不是。因為編譯android時,一定會產生警告
我目的如下
我寫了一個編譯android的script
在make時,如果發生error,我會將error訊息存入
檔案,然後寄出來,但是目前發現光只有error很難
debug, 所以想除了stderr之後,也存一份完整的log
(包括stdout , stderr),目前就是卡在這裡。
因為編譯android時,會有很多warning訊息,所以
stderr的輸出內容有兩種訊息,照上面的作法是將
stderr的訊息最後接在完整log的後面,這樣log的
順序應該會不正確,因為warning的訊息可能是很早
就產出的。
<=說明不是很詳細,如果看不懂的話,我在寫更詳細。
→
10/29 13:59, , 19F
10/29 13:59, 19F
→
10/29 14:00, , 20F
10/29 14:00, 20F
→
10/29 14:00, , 21F
10/29 14:00, 21F
→
10/29 14:01, , 22F
10/29 14:01, 22F
→
10/29 14:01, , 23F
10/29 14:01, 23F
→
10/29 14:55, , 24F
10/29 14:55, 24F
→
10/29 14:55, , 25F
10/29 14:55, 25F
→
10/29 16:07, , 26F
10/29 16:07, 26F
→
10/29 16:07, , 27F
10/29 16:07, 27F
→
10/29 16:08, , 28F
10/29 16:08, 28F
→
10/29 16:08, , 29F
10/29 16:08, 29F
→
10/29 16:09, , 30F
10/29 16:09, 30F
原來filter是這個意思。
另外make執行時,發生的錯誤訊息應該不是很固定吧? 所以filter應該不好寫。
且本來stderr和stdout輸出就是分開的,現在把它合起來,然後另外寫個
filter來把特定字串找出來,我覺得真是作白工XD
k大的方法說可以把stdout/err對調,如果真的可以的話,配合tee,應該可以
達成我的需求。
※ 編輯: tsaiminghan 來自: 59.121.130.222 (10/29 16:52)
→
10/29 16:55, , 31F
10/29 16:55, 31F
是啊,
警告也是從stderr出來,但是因為發生error時,error訊息會在stderr最後面,
所以輸出的檔案我只要看最後面就可以抓到錯誤訊息。
但是因為光錯誤訊息,沒有stdout輸出,不容易知道發生什麼事,所以才希望有完整
的log,然後由error訊息去完整log中找到發生問題的點,看發生什麼事。
※ 編輯: tsaiminghan 來自: 59.121.130.222 (10/29 17:02)
→
10/29 16:58, , 32F
10/29 16:58, 32F
→
10/29 16:59, , 33F
10/29 16:59, 33F
→
10/29 17:00, , 34F
10/29 17:00, 34F
→
10/29 17:01, , 35F
10/29 17:01, 35F
還有 22 則推文
→
10/29 17:18, , 58F
10/29 17:18, 58F
→
10/29 17:18, , 59F
10/29 17:18, 59F
→
10/29 17:19, , 60F
10/29 17:19, 60F
→
10/29 17:19, , 61F
10/29 17:19, 61F
→
10/29 17:19, , 62F
10/29 17:19, 62F
→
10/29 17:19, , 63F
10/29 17:19, 63F
→
10/29 17:20, , 64F
10/29 17:20, 64F
→
10/29 17:21, , 65F
10/29 17:21, 65F
→
10/29 17:21, , 66F
10/29 17:21, 66F
→
10/29 17:22, , 67F
10/29 17:22, 67F
我不確定行不行但是
想法如下
如果stdout和stderr換過來
====script A.sh======
make | tee err.log
==================
====script B.sh====
a.sh &> all.log
※ 編輯: tsaiminghan 來自: 59.121.131.72 (10/29 17:24)
→
10/29 17:23, , 68F
10/29 17:23, 68F
→
10/29 17:24, , 69F
10/29 17:24, 69F
→
10/29 17:24, , 70F
10/29 17:24, 70F
→
10/29 17:25, , 71F
10/29 17:25, 71F
→
10/29 17:26, , 72F
10/29 17:26, 72F
→
10/29 17:26, , 73F
10/29 17:26, 73F
→
10/29 17:28, , 74F
10/29 17:28, 74F
→
10/29 17:28, , 75F
10/29 17:28, 75F
→
10/29 17:28, , 76F
10/29 17:28, 76F
→
10/29 17:30, , 77F
10/29 17:30, 77F
→
10/29 17:30, , 78F
10/29 17:30, 78F
→
10/29 17:31, , 79F
10/29 17:31, 79F
→
10/29 17:31, , 80F
10/29 17:31, 80F
→
10/29 17:31, , 81F
10/29 17:31, 81F
→
10/29 17:32, , 82F
10/29 17:32, 82F
→
10/29 17:32, , 83F
10/29 17:32, 83F
→
10/29 17:33, , 84F
10/29 17:33, 84F
→
10/29 17:33, , 85F
10/29 17:33, 85F
→
10/29 17:34, , 86F
10/29 17:34, 86F
→
10/29 17:34, , 87F
10/29 17:34, 87F
→
10/29 17:35, , 88F
10/29 17:35, 88F
→
10/29 17:36, , 89F
10/29 17:36, 89F
→
10/29 17:36, , 90F
10/29 17:36, 90F
→
10/29 17:37, , 91F
10/29 17:37, 91F
→
10/29 17:37, , 92F
10/29 17:37, 92F
→
10/29 17:37, , 93F
10/29 17:37, 93F
→
10/29 17:40, , 94F
10/29 17:40, 94F
→
10/29 17:40, , 95F
10/29 17:40, 95F
測試結果不行
輸出互換ok,導出也ok,但
tee的使用跟我想像中不太一樣
以下執行時
xxx | tee zzz.log
會先把stderr印出,然後再印出stdout,因此順序會不對。
所以如果要順序正確,一定要把stdout和stderr導
到同一輸出才行,但導到同一輸出,就做不到分流的目的
※ 編輯: tsaiminghan 來自: 59.121.128.220 (10/31 23:39)