shell上:
0表示標準輸入,從終端輸入資料,一般指鍵盤
1表示標準輸出,資料顯示到終端,一般指螢幕
2表示標準錯誤輸出,錯誤提示顯示到終端,一般指螢幕
> 預設為標準輸出重新導向,與 1> 相同
2>&1 意思是把 標準錯誤輸出 重新導向到 標準輸出.
2>1表示把標準錯誤重新導向到檔案1中去,用&區分數字表示的是檔案名稱還是檔案描述符
&>file 意思是把 標準輸出 和 標準錯誤輸出 都重新導向到檔案file中
<,<< ,>,>>區別
""<"表示輸入重新導向運算子,">"表示輸出重新導向t運算子。
"<<"這種輸入告訴Shell,當前標準輸入來自命令列的開始標記 tag 和結束標記 tag 之間的內容作為輸入。
">"輸出時,如果檔案不存在會自動建立一個檔案,如果第二次輸入時,會覆蓋前一次的輸入內容。
">>"表示把第二次的輸出內容追加到檔案中去,而不是覆蓋。
ps ef > a.txt 把ps命令的執行結果重新導向到a.txt檔案中,而不在螢幕上顯示了。
wc<a.txt wc原本直接統計從終端輸入的文本行資訊(行數,單詞數,字元數),這裡將輸入重新導向為a.txt檔案
例子1 <<:
pp@pp-Satellite-L700~$ cat << EOF> hello> what?> ok> bye> EOFhellowhat?okbyepp@pp-Satellite-L700$ cat >test.txt << EOF> hello> what?> ok> bye> EOFpp@pp-Satellite-L700$ cat test.txt hellowhat?okbye
第一條命令:cat <<EOF, 表示以EOF為結束標識,在這之間的內容全部作為輸入傳送給cat
第二條命令:cat > test.txt << EOF, 先將cat的輸出重新導向到檔案test.txt,再將輸入重新導向到命令列端以EOF為結束標記間的內容。等價於cat 1>test.txt 0<< EOF 和cat 0<<EOF 1>test.txt
例子2:
注意,為了方便理解,必須設定一個環境使得執行grep da*命令會有正常輸出和錯誤輸出,然後分別使用下面的命令產生三個檔案:
grep da * > greplog1
grep da * > greplog2 1>&2
grep da * > greplog3 2>&1 //grep da * 2>greplog4 1>&2 結果一樣
#查看greplog1會發現裡面只有正常輸出內容
#查看greplog2會發現裡面什麼都沒有
#查看greplog3會發現裡面既有正常輸出內容又有錯誤輸出內容
例子3:
ls 1>/dev/null 2>/dev/null
/dev/null是一個特殊檔案裝置,所有的輸入都將會被拋棄掉。常用來過濾掉不想看到的輸出。
參考:
http://blog.sina.com.cn/s/blog_406127500102uxrs.html
http://blog.csdn.net/jfkidear/article/details/7823486