當linux執行乙個程式的時候,會自動開啟三個流,標準輸入*(standard input),標準輸出(standard output),標準錯誤輸出(standard error)*,比如在開啟命令行時,預設情況下,命令列的標準輸入連線到鍵盤,標準輸出和標準錯誤都連線到螢幕,儘管三個流都開啟,但他會根據需要使用。
>
>
可以改變文字流的方向,指定輸出目的地。(覆蓋)
例子:
輸入命令
ls
> aa.txt
解釋:
改變ls命令用來顯示內容的容器,預設容器是螢幕,現將容器改為aa.txt
執行結果:
開啟aa.txt可看到所有ls命令的顯示內容
「注意」:
樣例:
echo ok > a.txt
解釋:echo的作用是將文字流導向標準輸出
執行結果:ok寫入a.txt中
cat < a.txt
解釋:將cat標準輸入只想a.txt,文字會從檔案流到cat,然後輸出到螢幕上
執行結果:同cat a.txt
cat < a.txt > b.txt
解釋:a.txt中內容複製到了b.txt中
cat > a.txt < b.txt
解釋:b.txt中內容複製到了a.txt中
>&
&
表示等同於的意思
例子:
假設void是乙個不存在的目錄,當我們執行
cd void > a.txt
螢幕出現錯誤提示
bash: cd: void: no such file or directory
當我們執行
cd void >
& a.txt
錯誤資訊被導向a.txt
樣例:
cd void 2 > a.txt > b.txt
解釋:標準錯誤對應的總是2,所有有以上寫法。標準錯誤輸出到a.txt,標準輸出輸出到b.txt
>>
>>
可以改變文字流的方向,指定輸出目的地。(追加)
例子:
cat a.txt >> b.txt
將cat a.txt命令的標準輸出指向b.txt檔案
執行結果:
開啟b.txt可看到a.txt的內容被新增到原b.txt內容後面
「注意」:
樣例:
做輸入分隔符
分隔符可以是任意字元。
cat
> a.txt << end
當執行cat > a.txt << end,命令並沒有結束,cat命令在等待你給他輸入資料,當我們敲入end後,cat命令才結束。end之前輸入的字元都被寫到a.txt檔案中,這就是輸入分隔符的作用。
>/dev/null
這條命令的作用是將標準輸出1重定向到/dev/null
中。/dev/null
代表linux的空裝置檔案,所有王這個檔案裡寫入的內容都會丟失,俗稱「黑洞」。執行此命令後,標準輸出就會不再存在,沒有任何地方能找到輸出的內容。
2>&1
這條命令用到了重定向繫結,採用&可以將兩個輸出繫結在一起。這條命令的作用是錯誤輸出將和標準輸出同用乙個檔案描述符,也就是錯誤輸出會和標準輸出輸出到同乙個地方。
>/dev/null 2>&1 vs 2>&1 >/dev/null
從左到右地來分析2>&1 >/dev/null
:
2>&1
,將錯誤輸出繫結到標準輸出上。由於此時的標準輸出是預設值,也就是輸出到螢幕,所以錯誤輸出會輸出到螢幕。
>/dev/null
,將標準輸出1重定向到/dev/null
中。
我們用乙個**來更好地說明這兩條命令的區別:
命令標準輸出
錯誤輸出
>/dev/null 2>&1
丟棄丟棄
2>&1 > /dev/null
丟棄螢幕
標準輸入標準輸出標準錯誤重定向
重定向操作符 描述 將命令輸出寫入到檔案或裝置 如印表機 而不是命令提示符視窗或控制代碼。從檔案而不是從鍵盤或控制代碼讀入命令輸入。將命令輸出新增到檔案末尾而不刪除檔案中已有的資訊。將乙個控制代碼的輸出寫入到另乙個控制代碼的輸入中。從乙個控制代碼讀取輸入並將其寫入到另乙個控制代碼輸出中。從乙個命令中...
重定向標準輸出
各位看官,今天我們來聊聊標準io流的重定向問題。必須,在程式設計時會輸出大量資訊到螢幕上,非常不方便閱讀,我們可以通過對於標準輸出的重定向,從而使得閱讀更方便。主要涉及的方法為 setin inputstream setout printstream seterr printstream setin...
標準輸出 標準錯誤重定向(格式)
command filename 把把標準輸出重定向到乙個新檔案中 command filename 把把標準輸出重定向到乙個檔案中 追加 command 1 fielname 把把標準輸出重定向到乙個檔案中 command filename 2 1 把把標準輸出和標準錯誤一起重定向到乙個檔案中 c...