文件 | 文件描述符 |
輸入文件—標(biāo)準(zhǔn)輸入 | 0(缺省是鍵盤,為0時(shí)是文件或者其他命令的輸出) |
輸出文件—標(biāo)準(zhǔn)輸出 | 1(缺省是屏幕,為1時(shí)是文件) |
錯(cuò)誤輸出文件—標(biāo)準(zhǔn)錯(cuò)誤 | 2(缺省是屏幕,為2時(shí)是文件) |
標(biāo)準(zhǔn)輸入:從鍵盤輸入數(shù)據(jù),即從鍵盤讀入數(shù)據(jù)。
標(biāo)準(zhǔn)輸出:把數(shù)據(jù)輸出到終端上。
標(biāo)準(zhǔn)錯(cuò)誤輸出:把標(biāo)準(zhǔn)錯(cuò)誤輸出到終端上。
默認(rèn)的標(biāo)準(zhǔn)輸入指的是鍵盤,默認(rèn)的標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯(cuò)誤輸出指的是屏幕或者是終端。
系統(tǒng)為這三個(gè)文件分配了文件標(biāo)識(shí)符fd(file descripter).
在Linux系統(tǒng)下,一切皆是文件,對文件的操作,一般要用到文件標(biāo)識(shí)符。它們的文件標(biāo)識(shí)符,分別為0,1,2。他們的關(guān)系如下表:
文件描述符 | 名稱 | 通用縮寫 | 默認(rèn)值 |
---|---|---|---|
0 | 標(biāo)準(zhǔn)輸入 | stdin | 鍵盤 |
1 | 標(biāo)準(zhǔn)輸出 | stdout | 屏幕 |
2 | 標(biāo)準(zhǔn)錯(cuò)誤 | stderr | 屏幕 |
1.輸出重定向:
Command > filename | 把標(biāo)準(zhǔn)輸出重定向到一個(gè)新文件中 |
Command >> filename | 把標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加) |
Command > filename | 把標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中 |
Command > filename 2>1 | 把標(biāo)準(zhǔn)輸出和錯(cuò)誤一起重定向到一個(gè)文件中 |
Command 2 > filename | 把標(biāo)準(zhǔn)錯(cuò)誤重定向到一個(gè)文件中 |
Command 2 >> filename | 把標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加) |
Command >> filename2>1 | 把標(biāo)準(zhǔn)輸出和錯(cuò)誤一起重定向到一個(gè)文件(追加) |
2.輸入重定向:
Command filename > filename2 | Command命令以filename文件作為標(biāo)準(zhǔn)輸入,以filename2文件作為標(biāo)準(zhǔn)輸出 |
Command filename | Command命令以filename文件作為標(biāo)準(zhǔn)輸入 |
Command delimiter | 從標(biāo)準(zhǔn)輸入中讀入,知道遇到delimiter分界符 |
3.綁定重定向
Command >m | 把標(biāo)準(zhǔn)輸出重定向到文件描述符m中 |
Command - | 關(guān)閉標(biāo)準(zhǔn)輸入 |
Command 0>- | 同上 |
三、使用實(shí)例
cmd >> file
#說明: 將 cmd 的輸出發(fā)送到 file 文件(追加模式)
cmd file
#說明: 以 file 文件的內(nèi)容作為 cmd 的輸入
cmd text
#說明: 嵌入文件(here document, 類似于PHP語法)形式的輸入
#shell 可在行內(nèi)輸入中做變量、命令和算術(shù)替換
cmd - text
#說明: 作用同上, 不過會(huì)自動(dòng)刪除here document中每行開頭的制表符Tab
cmd word
#說明: here string 格式的輸入
#參見: http://bash.cyberciti.biz/guide/Here_strings
#參見: http://linux.die.net/abs-guide/x15683.html
cmd > file
#說明: 以讀寫方式打開文件 file
cmd >| file
#說明: 強(qiáng)制以覆蓋方式將 cmd 的輸出發(fā)送到 file 文件
#即便 shell 設(shè)置了 noclobber 選項(xiàng)也是如此
cmd >n
#說明: 將 cmd 的輸出發(fā)送到文件描述符 n
cmd m>n
#說明: 作用同上。將本該輸出到文件描述符 m 的內(nèi)容, 發(fā)送到文件描述符 n
cmd >-
#說明: 關(guān)閉標(biāo)準(zhǔn)輸出
cmd n
#說明: 從文件描述符 n 處獲取內(nèi)容作為 cmd 命令的輸入
cmd mn
#說明: 作用同上。除了本該從文件描述符 m 處獲取輸入,改為從文件描述符 n 處獲取
cmd -
#說明: 關(guān)閉標(biāo)準(zhǔn)輸入
cmd n-
#說明: 通過復(fù)制移動(dòng)文件操作符 n 為標(biāo)準(zhǔn)輸入并且關(guān)閉原始輸入
cmd >n-
#說明: 通過復(fù)制移動(dòng)文件操作符 n 為標(biāo)準(zhǔn)輸出并且關(guān)閉原始輸出
cmd 2>file
#說明: 將標(biāo)準(zhǔn)錯(cuò)誤輸出發(fā)送到文件 file
cmd > file 2>1
#說明: 將標(biāo)準(zhǔn)輸出發(fā)送到文件 file, 將標(biāo)準(zhǔn)錯(cuò)誤發(fā)送到文件描述符 1, 也即 file 文件
cmd > file
#說明: 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都發(fā)送到文件 file (作用同上)
cmd > file
#說明: 作用同上, 更好的格式
cmd >> file
#說明: 將標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出發(fā)送到文件 file (追加模式)
cmd > f1 2> f2
#說明: 將標(biāo)準(zhǔn)輸出發(fā)送到文件 f1, 將標(biāo)準(zhǔn)錯(cuò)誤發(fā)送到文件 f2
cmd | tee files
#說明: 發(fā)送 cmd 的輸出到標(biāo)準(zhǔn)輸出 (通常為終端) 和 文件 files
cmd 2>1 | tee files
#說明: 發(fā)送 cmd 的輸出和錯(cuò)誤到標(biāo)準(zhǔn)輸出 (通常為終端) 和 文件 files
cmd | tee files
#說明: 作用同上
四、shell重定向的一些高級(jí)用法
1.重定向標(biāo)準(zhǔn)錯(cuò)誤
例子1:
2.exec用法
exec命令可以用來替代當(dāng)前shell;換句話說,并沒有啟動(dòng)子shell,使用這一條命令時(shí)任何現(xiàn)有環(huán)境變量將會(huì)被清除,并重新啟動(dòng)一個(gè)shell(重新輸入用戶名和密碼進(jìn)入)。
exec 30 0name.txt
read line1
read line2
exec 03
echo $line1
echo $line2
其中:
首先,exec 30 0name.txt的意思是把標(biāo)準(zhǔn)輸入重定向到文件描述符3(0表示標(biāo)準(zhǔn)輸入),然后把文件name.txt內(nèi)容重定向到文件描述符0,實(shí)際上就是把文件name.txt中的內(nèi)容重定向到文件描述符3。然后通過exec打開文件描述符3;
然后,通過read命令讀取name.txt的第一行內(nèi)容line1,第二行內(nèi)容line2,通過Exec 03關(guān)閉文件描述符3;
最后,用echo命令輸出line1和line2。最好在終端運(yùn)行一下這個(gè)腳本,親自嘗試一下。
例子2:
文件 | 說明 |
---|---|
/dev/stdin | 文件描述符 0 的復(fù)制品 |
/dev/stdout | 文件描述符 1 的復(fù)制品 |
/dev/stderr | 文件描述符 2 的復(fù)制品 |
/dev/fd/n | 文件描述符 n 的復(fù)制品 |
/dev/tcp/host/port | Bash 在 port 打開到 host 的 TCP 連接 |
/dev/udp/host/port | Bash 在 port 打開到 host 的 UDP 連接 |
標(biāo)簽:淘寶邀評 赤峰 許昌 邵陽 巴彥淖爾 馬鞍山 金昌 婁底
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux base shell重定向詳解》,本文關(guān)鍵詞 Linux,base,shell,重定向,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。下一篇:linux鏈接編譯詳解