初學linux shell. 想寫個指令碼a.sh 分析另外乙個指令碼b.sh中某程式的執行輸出結果.
./a.sh b.sh args
a.sh 如下:
#!/bin/sh
./$1 $2 > /tmp/log
#search keyword
grep -l "keyword" /tmp/log
if [ $? -eq 0 ]
then
code=0
else
code=-1
fiexit
但是在/tmp/log 裡面總是只有部分輸出, 另外一部分由於沒有重定向成功而列印在了螢幕上.
解決方案:
修改第一行為
./$1 $2 > /tmp/log 2>&1
原因:程式中有標準輸出stdout也有錯誤輸出stderr. 之前的寫法只是重定向了stdout, 並未包含stderr.
cmd > file 把 stdout 重定向到 file 檔案中;
cmd >> file 把 stdout 重定向到 file 檔案中(追加);
cmd 1> fiel 把 stdout 重定向到 file 檔案中;
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 檔案中;
cmd 2> file 把 stderr 重定向到 file 檔案中;
cmd 2>> file 把 stderr 重定向到 file 檔案中(追加);
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 檔案中(追加);
重定向標準輸出
各位看官,今天我們來聊聊標準io流的重定向問題。必須,在程式設計時會輸出大量資訊到螢幕上,非常不方便閱讀,我們可以通過對於標準輸出的重定向,從而使得閱讀更方便。主要涉及的方法為 setin inputstream setout printstream seterr printstream setin...
重定向標準錯誤輸出
第5章介紹了標準輸出的概念,並解釋了如何重定向命令的標準輸出。除了標準輸出之外,命令還可以將輸出傳送到標準錯誤輸出。命令將錯誤訊息傳送到標準錯誤輸出,這樣就可以避免與傳送到標準輸出的資訊混淆在一起。與處理標準輸出一樣,預設情況下,shell將命令的標準錯誤輸出傳送到螢幕上。除非重定向標準輸出和標準錯...
重定向標準錯誤輸出
8.2.3 重定向標準錯誤輸出 第5章介紹了標準輸出的概念,並解釋了如何重定向命令的標準輸出。除了標準輸出之外,命令還可以將輸出傳送到標準錯誤輸出。命令將錯誤訊息傳送到標準錯誤輸出,這樣就可以避免與傳送到標準輸出的資訊混淆在一起。與處理標準輸出一樣,預設情況下,shell將命令的標準錯誤輸出傳送到螢...