亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

Linux base shell重定向詳解

2020-07-27 19:17:13
字體:
來源:轉載
供稿:網友

一、標準輸入,標準輸出與標準錯誤輸出

在linux shell執行命令時,每個進程都和三個打開的文件相聯系,并使用文件描述符來引用這些文件。由于文件描述符不容易記憶,shell同時也給出了相應的文件名:

文件文件描述符
輸入文件―標準輸入0(缺省是鍵盤,為0時是文件或者其他命令的輸出)
輸出文件―標準輸出1(缺省是屏幕,為1時是文件)
錯誤輸出文件―標準錯誤2(缺省是屏幕,為2時是文件)
系統中實際上有12個文件描述符,我們可以任意使用文件描述符3到9.

標準輸入:從鍵盤輸入數據,即從鍵盤讀入數據。
標準輸出:把數據輸出到終端上。
標準錯誤輸出:把標準錯誤輸出到終端上。

默認的標準輸入指的是鍵盤,默認的標準輸出與標準錯誤輸出指的是屏幕或者是終端。

系統為這三個文件分配了文件標識符fd(file descripter).

在Linux系統下,一切皆是文件,對文件的操作,一般要用到文件標識符。它們的文件標識符,分別為0,1,2。他們的關系如下表:

文件描述符名稱通用縮寫默認值
0標準輸入stdin鍵盤
1標準輸出stdout屏幕
2標準錯誤stderr屏幕

二.文件重定向:改變程序運行的輸入來源和輸出地點

1.輸出重定向:

Command > filename把標準輸出重定向到一個新文件中
Command >> filename把標準輸出重定向到一個文件中(追加)
Command > filename把標準輸出重定向到一個文件中
Command > filename 2>&1把標準輸出和錯誤一起重定向到一個文件中
Command 2 > filename把標準錯誤重定向到一個文件中
Command 2 >> filename把標準輸出重定向到一個文件中(追加)
Command >> filename2>&1把標準輸出和錯誤一起重定向到一個文件(追加)

2.輸入重定向:

Command < filename > filename2Command命令以filename文件作為標準輸入,以filename2文件作為標準輸出
Command < filenameCommand命令以filename文件作為標準輸入
Command << delimiter 從標準輸入中讀入,知道遇到delimiter分界符

3.綁定重定向

Command >&m把標準輸出重定向到文件描述符m中
Command < &-關閉標準輸入
Command 0>&-同上

三、使用實例

復制代碼 代碼如下:

cmd > file
#說明: 將 cmd 的輸出發送到 file 文件(覆蓋模式)

cmd >> file
#說明: 將 cmd 的輸出發送到 file 文件(追加模式)

cmd < file
#說明: 以 file 文件的內容作為 cmd 的輸入

cmd << text
#說明: 嵌入文件(here document, 類似于PHP語法)形式的輸入
#shell 可在行內輸入中做變量、命令和算術替換

cmd <<- text
#說明: 作用同上, 不過會自動刪除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
#說明: 強制以覆蓋方式將 cmd 的輸出發送到 file 文件
#即便 shell 設置了 noclobber 選項也是如此

cmd >&n
#說明: 將 cmd 的輸出發送到文件描述符 n

cmd m>&n
#說明: 作用同上。將本該輸出到文件描述符 m 的內容, 發送到文件描述符 n

cmd >&-
#說明: 關閉標準輸出

cmd <&n
#說明: 從文件描述符 n 處獲取內容作為 cmd 命令的輸入

cmd m<&n
#說明: 作用同上。除了本該從文件描述符 m 處獲取輸入,改為從文件描述符 n 處獲取

cmd <&-
#說明: 關閉標準輸入

cmd <&n-
#說明: 通過復制移動文件操作符 n 為標準輸入并且關閉原始輸入

cmd >&n-
#說明: 通過復制移動文件操作符 n 為標準輸出并且關閉原始輸出

cmd 2>file
#說明: 將標準錯誤輸出發送到文件 file

cmd  > file 2>&1
#說明: 將標準輸出發送到文件 file, 將標準錯誤發送到文件描述符 1, 也即 file 文件

cmd  >& file
#說明: 將標準輸出和標準錯誤都發送到文件 file (作用同上)

cmd  &> file
#說明: 作用同上, 更好的格式

cmd  &>> file
#說明: 將標準錯誤和標準輸出發送到文件 file (追加模式)

cmd  > f1 2> f2
#說明: 將標準輸出發送到文件 f1, 將標準錯誤發送到文件 f2

cmd  | tee files
#說明: 發送 cmd 的輸出到標準輸出 (通常為終端) 和 文件 files

cmd 2>&1 | tee files
#說明: 發送 cmd 的輸出和錯誤到標準輸出 (通常為終端) 和 文件 files

cmd |& tee files
#說明: 作用同上


四、shell重定向的一些高級用法

1.重定向標準錯誤
例子1:

復制代碼 代碼如下:
command 2> /dev/null

如果command執行出錯,將錯誤的信息重定向到空設備
例子2:
復制代碼 代碼如下:
command > out.put 2>&1

將command執行的標準輸出和標準錯誤重定向到out.put(也就是說不管command執行正確還是錯誤,輸出都打印到out.put)。

2.exec用法
exec命令可以用來替代當前shell;換句話說,并沒有啟動子shell,使用這一條命令時任何現有環境變量將會被清除,并重新啟動一個shell(重新輸入用戶名和密碼進入)。

復制代碼 代碼如下:
exec command

其中,command通常是一個shell腳本。
對文件描述符操作的時候用(也只有再這時候),它不會覆蓋你當前的shell
例子1:
復制代碼 代碼如下:
#!/bin/bash
#file_desc


exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2

其中:
首先,exec 3<&0 0<name.txt的意思是把標準輸入重定向到文件描述符3(0表示標準輸入),然后把文件name.txt內容重定向到文件描述符0,實際上就是把文件name.txt中的內容重定向到文件描述符3。然后通過exec打開文件描述符3;
然后,通過read命令讀取name.txt的第一行內容line1,第二行內容line2,通過Exec 0<&3關閉文件描述符3;
最后,用echo命令輸出line1和line2。最好在終端運行一下這個腳本,親自嘗試一下。

例子2:

復制代碼 代碼如下:
exec 3<>test.sh;
#打開test.sh可讀寫操作,與文件描述符3綁定

while read line<&3
 do
    echo $line;
done

#循環讀取文件描述符3(讀取的是test.sh內容)
復制代碼 代碼如下:
exec 3>&-
exec 3<&-

#關閉文件的,輸入,輸出綁定

五、bash shell 重定向的幾個特殊文件

文件說明
/dev/stdin文件描述符 0 的復制品
/dev/stdout文件描述符 1 的復制品
/dev/stderr文件描述符 2 的復制品
/dev/fd/n文件描述符 n 的復制品
/dev/tcp/host/portBash 在 port 打開到 host 的 TCP 連接
/dev/udp/host/portBash 在 port 打開到 host 的 UDP 連接
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品久久久久久综合乱菊| 日本在线精品视频| 欧美电影《睫毛膏》| 国产精品日韩久久久久| 日韩欧美亚洲成人| 91亚洲国产成人久久精品网站| 欧美大尺度激情区在线播放| 欧美成人午夜激情| 大伊人狠狠躁夜夜躁av一区| 国产精品一区二区三区久久| 国产在线视频91| 国语自产精品视频在线看一大j8| 国外日韩电影在线观看| 欧美视频在线观看 亚洲欧| 欧美大秀在线观看| 欧美丝袜美女中出在线| 国产日韩中文字幕| 久久人人爽人人爽爽久久| 亚洲精品一区二三区不卡| 一区二区三区视频观看| 国产成人综合精品在线| 97在线观看免费高清| 欧美多人乱p欧美4p久久| 亚洲a级在线播放观看| 91免费在线视频网站| 日本一本a高清免费不卡| 精品久久久香蕉免费精品视频| 中文字幕亚洲色图| 亚洲人免费视频| 成人在线激情视频| 亚洲午夜女主播在线直播| 精品一区二区电影| 一区二区亚洲欧洲国产日韩| 欧美综合一区第一页| 日本精品久久久久久久| 国产一区二区欧美日韩| 亚洲日韩中文字幕在线播放| 欧美激情精品久久久久久大尺度| 97超视频免费观看| 亚洲人成网在线播放| 日韩免费观看av| 色婷婷综合成人| 91久久精品国产91久久| 2019中文字幕在线免费观看| 色哟哟网站入口亚洲精品| 国产精品久在线观看| 欧美午夜影院在线视频| 亚洲精品国偷自产在线99热| 日韩美女写真福利在线观看| 欧美成人精品在线观看| 欧美一乱一性一交一视频| 国产精品r级在线| 一区二区欧美亚洲| 亚洲美女中文字幕| 亚洲精品www久久久久久广东| 97视频免费观看| 亚洲第一精品夜夜躁人人躁| 亚洲国产精品成人va在线观看| 一区二区日韩精品| 日韩欧美综合在线视频| 久久香蕉国产线看观看av| 97视频在线观看播放| 亚洲男人天堂手机在线| 欧美国产中文字幕| 九九热精品视频| 国产精品三级久久久久久电影| 欧美在线中文字幕| 色婷婷综合久久久久中文字幕1| 精品久久久一区| 国产精品色午夜在线观看| 久久中文字幕在线| 亚洲一区二区三区成人在线视频精品| 不卡中文字幕av| 久久天天躁狠狠躁夜夜躁2014| 国产精品久久久久久超碰| 琪琪第一精品导航| 亚洲a∨日韩av高清在线观看| 国产在线播放91| 亚洲精品在线观看www| 亚洲欧美成人精品| 国产经典一区二区| 狠狠躁天天躁日日躁欧美| 欧美中文字幕在线播放| 8090理伦午夜在线电影| 日韩黄色av网站| 国内精品中文字幕| 日韩免费精品视频| 欧美最猛黑人xxxx黑人猛叫黄| 51精品在线观看| 国产不卡av在线| 欧美激情在线一区| 午夜精品久久久久久久99热| 国产网站欧美日韩免费精品在线观看| 亚洲va久久久噜噜噜久久天堂| 久久亚洲精品一区| 欧美成人免费播放| 欧美乱大交做爰xxxⅹ性3| 美女视频黄免费的亚洲男人天堂| 欧美小视频在线| 538国产精品一区二区免费视频| 日韩人体视频一二区| 亚洲精品成人久久久| 欧美色道久久88综合亚洲精品| 亚洲视频在线视频| 日韩电影中文字幕在线观看| 国产精品第一第二| 欧美性高潮床叫视频| 欧美精品福利在线| 欧美大片在线影院| 色偷偷9999www| 亚洲xxxx18| 久久伊人91精品综合网站| 亚洲第一福利视频| 欧美一级淫片丝袜脚交| 91视频国产高清| 国产精品99久久久久久www| 欧美日韩一区二区三区| 欧美激情视频播放| 欧美大学生性色视频| 欧洲亚洲在线视频| 亚洲精品影视在线观看| 亚洲国产日韩欧美在线动漫| 亚洲国产精品系列| 国产亚洲一区二区精品| 亚洲欧美激情在线视频| 色综合久久88色综合天天看泰| 亚洲电影成人av99爱色| 亚洲欧美在线一区二区| 久久久久久网站| 成人黄色短视频在线观看| 亚洲视频精品在线| 欧美在线观看视频| 国产精品国产自产拍高清av水多| 日本国产一区二区三区| 亚洲欧美国产日韩中文字幕| 国产精品爽黄69| 91日本在线视频| 欧美精品激情blacked18| 成人网址在线观看| 欧洲日本亚洲国产区| 亚洲人成网在线播放| 欧美高清视频一区二区| 日韩在线观看成人| 一本色道久久88综合日韩精品| 中文字幕不卡在线视频极品| 久色乳综合思思在线视频| 亚洲精品99久久久久| 亚洲福利视频专区| 韩国精品久久久999| 欧美综合第一页| 国产日本欧美一区| 国产精品久久久久久久久男| 亚洲91av视频| 26uuu亚洲伊人春色| 久久久久久com| 欧美另类老肥妇| 国产精品99久久99久久久二8| 日韩欧美在线一区| 日韩一区在线视频| 久久97精品久久久久久久不卡| 91精品国产91久久久久久久久| 亚洲人成免费电影| 黑人欧美xxxx| 亚洲色无码播放|