重定向> >>與標準輸入、標準輸出、標準錯誤輸出

當linux執行一個程序的時候,會自動打開三個流,標準輸入*(standard input),標準輸出(standard output),標準錯誤輸出(standard error)*,比如在打開命令行時,默認情況下,命令行的標準輸入連接到鍵盤,標準輸出和標準錯誤都連接到屏幕,儘管三個流都打開,但他會根據需要使用。

重定向

>

> 可以改變文本流的方向,指定輸出目的地。(覆蓋)

例子:

輸入命令

ls > aa.txt

解釋:

改變ls命令用來顯示內容的容器,默認容器是屏幕,現將容器改爲aa.txt

執行結果:

打開aa.txt可看到所有ls命令的顯示內容

「注意」:

  • 若aa.txt是一個不存在文件,重定向時計算機會新建一個aa.txt文件,並將命令行的標準輸出指向這個文件。

  • 若aa.txt是一個已存在文件,重定向時會覆蓋原aa.txt文件中的內容。

樣例:

  1. echo ok > a.txt

    解釋:echo的作用是將文本流導向標準輸出

    執行結果:ok寫入a.txt中

  2. cat < a.txt

    解釋:將cat標準輸入只想a.txt,文本會從文件流到cat,然後輸出到屏幕上

    執行結果:同cat a.txt

  3. cat < a.txt > b.txt

    解釋:a.txt中內容複製到了b.txt中

  4. 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內容後面

「注意」:

  • 若b.txt是一個不存在文件,重定向時計算機會新建一個b.txt文件,並將命令行的標準輸出指向這個文件。

  • 若b.txt文件已存在,重定向時會追加到原b.txt中內容後面,不覆蓋。

樣例:

  1. 做輸入分隔符

    分隔符可以是任意字符。

cat > a.txt << end

​ 當執行cat > a.txt << end,命令並沒有結束,cat命令在等待你給他輸入數據,當我們敲入end後,cat命令才結束。end之前輸入的字符都被寫到a.txt文件中,這就是輸入分隔符的作用。

高級用法

  1. >/dev/null

    這條命令的作用是將標準輸出1重定向到/dev/null中。 /dev/null代表linux的空設備文件,所有王這個文件裏寫入的內容都會丟失,俗稱“黑洞”。執行此命令後,標準輸出就會不再存在,沒有任何地方能找到輸出的內容。

  2. 2>&1

    這條命令用到了重定向綁定,採用&可以將兩個輸出綁定在一起。這條命令的作用是錯誤輸出將和標準輸出同用一個文件描述符,也就是錯誤輸出會和標準輸出輸出到同一個地方。

  3. >/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 丟棄 屏幕
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章