linux 命令行 I/O 重定向和管道

2.1.4.3 命令行 I/O 重定向和管道

將物理文件與程序的邏輯單元號相關聯的另一種方式是重定向或管道輸送預連接的標準 I/O 文件。重定向或管道在運行時執行命令中使用。

採用這種方式,讀取標準輸入(單元 5)和寫入標準輸出(單元 6)或標準錯誤(單元 0)的程序可以通過重定向(在命令行中使用 <、>、>>、>&、|、|&、2>、2>&1),讀取或寫入其他任何命名文件。

參見下表:

表 2–1 csh/sh/ksh 命令行重定向和管道

操作 

使用 C Shell 

使用 Bourne 或 Korn Shell 

標準輸入-從 mydata 讀取 

myprog < mydata

myprog < mydata

標準輸出-寫入(覆寫)myoutput 

myprog > myoutput

myprog > myoutput

標準輸出-寫入/追加至 myoutput 

myprog >> myoutput

myprog >> myoutput

將標準錯誤重定向至文件 

myprog >& errorfile

myprog 2> errorfile

將標準輸出通過管道輸送至另一程序的輸入 

myprog1 | myprog2

myprog1 | myprog2

將標準錯誤和輸出通過管道輸送至另一程序 

myprog1 |& myprog2

myprog1 2>&1 | myprog2

有關命令行重定向和管道的詳細信息,請參見 cshksh 和 sh 手冊頁。



46 關於Linux的I/O重定向

I/O重定向是一個過程,這個過程捕捉一個文件、或命令、或程序、或腳本、甚至代碼塊(code block)的輸出,然後把捕捉到的輸出,作爲輸入發送給另外一個文件、或命令、或程序、或腳本。

1、I/O重定向符合包含了基本I/O重定向符號和高級I/O重定向符號兩大類。

基本I/O重定向符號(須要注意的是能夠使用FD文件描寫敘述符作爲文件名):
cmd1 | cmd2:管道符,將cmd1的標準輸出作爲cmd2的標準輸入
> filename:將標準輸出寫到文件filename之中
< filename:將文件filename的內容讀入到標準輸入之中
>> filename:將標準輸出寫到文件filename之中,若filename文件已存在,則將標準輸出追加到filename已有內容之後
>| filename:即使noclobber選項已開啓,仍然強制將標準輸出寫到文件filename之中,即將filename文件覆蓋掉
n>| filename :即使noclobber選項已開啓,仍然強制將FD爲n的輸出寫到文件filename之中,即將filename文件覆蓋掉
n> filename:將FD爲n的輸出寫到文件filename之中
n< filename :將文件filename的內容讀入到FD n之中
n>> filename:將FD爲n的輸出寫到文件filename之中,若filename文件已存在,則將FD爲n的輸出追加到filename已有內容之後
<<delimiter :此處文檔(Here-document)

高級I/O重定向符號

n>&m:將FD爲m的輸出複製到FD爲n的文件
n<&m:將FD爲m的輸入複製到FD爲n的文件
n>&-:關閉FD爲n的輸出
n<&-:關閉FD爲n的輸入
&>file:將標準輸出和標準錯誤輸出重定向到文件

--------I/O重定向和管道的差別

首先須要注意的是管道|事實上也是I/O重定向的一個操作部分

1、管道左邊是一個能夠送到標準輸出(stdout)的命令,右邊是一個從標準輸入接受(stdin)的命令;假設I/O重定向符左邊是有輸出的命令,右邊僅僅能是文件,假設I/O重定向符左邊是能接受輸入的命令,右邊僅僅能是文件。

2、在管道運行的時候啓動了兩個進程,該進程分別運行左右兩邊的命令;而I/O重定向符值則在同一個進程中完畢

---------在Linux中有兩個重要的特殊文件:

/dev/null:這是一個空設備文件,被送到當中的所有的數據都會被丟棄,能夠將標準輸出和錯誤輸出所有重定向到該文件裏,此時既能夠將錯誤信息所有丟棄。

標準寫法是>/dev/null 2>&1

當中>/dev/null表示丟棄文件;
2>&1當中2和1分別表示標準輸出stdout和標準出錯stderr,>&表示等同於,也就是將標準出錯輸出2重定向於標註輸出1,因爲標準輸出已經被重定位到了/dev/null,所以標準出錯的輸出也被扔掉了。

該寫法也能夠是1>/dev/null 2>/dev/null,差別在這樣的情況下標準輸出和標準出錯都被送到/dev/null,這個文件被打開了兩遍;而>/dev/null 2 >& 1則是將標準輸出送到/dev/null,而標準出錯則是從管道送到/dev/null,/dev/null僅僅被打開了一次,當中/dev/null能夠換成其它不論什麼文件。


/dev/tty:當該文件被打開的時候shell會將其自己主動重定向到一個終端(包含顯示控制檯、遠程登陸僞中斷或者串口)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章