Unix的Shell重定向

大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出發送回​​到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,默認情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,默認情況下,這也是你的終端。

Unix文件描述符

一般情況下,每個 Unix/Linux 命令運行時都會打開三個文件:

  • 標準輸入文件(stdin)
  • 標準輸出文件(stdout)
  • 標準錯誤文件(stderr)

標準輸入文件(stdin)

stdin的文件描述符爲0,Unix程序默認從stdin讀取數據。

標準輸出文件(stdout)

stdout 的文件描述符爲1,Unix程序默認向stdout輸出數據。

標準錯誤文件(stderr)

stderr的文件描述符爲2,Unix程序會向stderr流中寫入錯誤信息。

空文件(/dev/null)

如果希望執行某個命令,但又不希望在屏幕上顯示輸出結果,那麼可以將輸出重定向到 /dev/null。語法爲:

$ command1 > /dev/null

這樣command1的所有輸出將不會在屏幕上顯示。

重定向方法

使用重定向符號(>, >>, <, <<)進行重定向。

標準輸入重定向(<)

默認情況下,command < file 將stdin 重定向到 file。

Unix 命令也可以從文件獲取輸入,語法爲:

$ command1 < file1

<是用來將符號右側文本的內容作爲左側命令的執行條件。

追加輸入重定向(<<)

<<是方便輸入多行內容到指定文件中。例如:

[aaa@XXXXXXX ~]$ cat >>nsw.txt<<EOF
Hello!
My name is NSW
EOF
[aaa@XXXXXXX ~]$ cat nsw.txt
Hello!
My name is NSW
//將多行內容追加輸入到指定文件中,指定目錄下沒有文件則新建。

標準輸出重定向(>)

默認情況下,command > file 將 stdout 重定向到 file。

Unix 命令也可以將輸入寫入到文件,語法爲:

$ command1 > file

如果文件 file 不存在,文件 file 將被創建。

如果文件 file 已經存在而且有內容,文件 file 的原有內容將被清空。

追加輸出重定向(>>)

Unix 命令也可以將輸入追加到文件,語法爲:

$ command1 >> file

如果文件 file 不存在,文件 file 將被創建。這個時候效果等同於標準輸出重定向。

如果文件 file 已經存在而且有內容,新的輸出將寫到文件 file 的最下面。

重定向舉例

stderr 重定向到 file

$ command 2 > file

stderr 追加到 file

$ command 2 >> file

對 stdin 和 stdout 都重定向

$ command < file1 >file2

command 命令將 stdin 重定向到 file1,將 stdout 重定向到 file2。

發佈了164 篇原創文章 · 獲贊 11 · 訪問量 104萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章