校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > Linux base shell重定向詳解

Linux base shell重定向詳解

熱門標(biāo)簽:河南信譽(yù)好的不封卡電話外呼系統(tǒng) 地圖標(biāo)注員都是年輕人 打電話機(jī)器人接我是他的秘書 客服外呼系統(tǒng)怎么樣 百度地圖標(biāo)注錯(cuò)了有責(zé)任嗎 江蘇云電銷機(jī)器人公司 如果做線上地圖標(biāo)注 華鋒e路航港口地圖標(biāo)注 揭陽(yáng)智能電話機(jī)器人推薦

一、標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出與標(biāo)準(zhǔn)錯(cuò)誤輸出

在linux shell執(zhí)行命令時(shí),每個(gè)進(jìn)程都和三個(gè)打開(kāi)的文件相聯(lián)系,并使用文件描述符來(lái)引用這些文件。由于文件描述符不容易記憶,shell同時(shí)也給出了相應(yīng)的文件名:

文件 文件描述符
輸入文件—標(biāo)準(zhǔn)輸入 0(缺省是鍵盤,為0時(shí)是文件或者其他命令的輸出)
輸出文件—標(biāo)準(zhǔn)輸出 1(缺省是屏幕,為1時(shí)是文件)
錯(cuò)誤輸出文件—標(biāo)準(zhǔn)錯(cuò)誤 2(缺省是屏幕,為2時(shí)是文件)
系統(tǒng)中實(shí)際上有12個(gè)文件描述符,我們可以任意使用文件描述符3到9.

標(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)下,一切皆是文件,對(duì)文件的操作,一般要用到文件標(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 屏幕

二.文件重定向:改變程序運(yùn)行的輸入來(lái)源和輸出地點(diǎn)

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í)例

復(fù)制代碼 代碼如下:

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

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

cmd file
#說(shuō)明: 以 file 文件的內(nèi)容作為 cmd 的輸入

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

cmd - text
#說(shuō)明: 作用同上, 不過(guò)會(huì)自動(dòng)刪除here document中每行開(kāi)頭的制表符Tab

cmd word
#說(shuō)明: here string 格式的輸入
#參見(jiàn): http://bash.cyberciti.biz/guide/Here_strings
#參見(jiàn): http://linux.die.net/abs-guide/x15683.html

cmd > file
#說(shuō)明: 以讀寫方式打開(kāi)文件 file

cmd >| file
#說(shuō)明: 強(qiáng)制以覆蓋方式將 cmd 的輸出發(fā)送到 file 文件
#即便 shell 設(shè)置了 noclobber 選項(xiàng)也是如此

cmd >n
#說(shuō)明: 將 cmd 的輸出發(fā)送到文件描述符 n

cmd m>n
#說(shuō)明: 作用同上。將本該輸出到文件描述符 m 的內(nèi)容, 發(fā)送到文件描述符 n

cmd >-
#說(shuō)明: 關(guān)閉標(biāo)準(zhǔn)輸出

cmd n
#說(shuō)明: 從文件描述符 n 處獲取內(nèi)容作為 cmd 命令的輸入

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

cmd -
#說(shuō)明: 關(guān)閉標(biāo)準(zhǔn)輸入

cmd n-
#說(shuō)明: 通過(guò)復(fù)制移動(dòng)文件操作符 n 為標(biāo)準(zhǔn)輸入并且關(guān)閉原始輸入

cmd >n-
#說(shuō)明: 通過(guò)復(fù)制移動(dòng)文件操作符 n 為標(biāo)準(zhǔn)輸出并且關(guān)閉原始輸出

cmd 2>file
#說(shuō)明: 將標(biāo)準(zhǔn)錯(cuò)誤輸出發(fā)送到文件 file

cmd  > file 2>1
#說(shuō)明: 將標(biāo)準(zhǔn)輸出發(fā)送到文件 file, 將標(biāo)準(zhǔn)錯(cuò)誤發(fā)送到文件描述符 1, 也即 file 文件

cmd  > file
#說(shuō)明: 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都發(fā)送到文件 file (作用同上)

cmd  > file
#說(shuō)明: 作用同上, 更好的格式

cmd  >> file
#說(shuō)明: 將標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出發(fā)送到文件 file (追加模式)

cmd  > f1 2> f2
#說(shuō)明: 將標(biāo)準(zhǔn)輸出發(fā)送到文件 f1, 將標(biāo)準(zhǔn)錯(cuò)誤發(fā)送到文件 f2

cmd  | tee files
#說(shuō)明: 發(fā)送 cmd 的輸出到標(biāo)準(zhǔn)輸出 (通常為終端) 和 文件 files

cmd 2>1 | tee files
#說(shuō)明: 發(fā)送 cmd 的輸出和錯(cuò)誤到標(biāo)準(zhǔn)輸出 (通常為終端) 和 文件 files

cmd | tee files
#說(shuō)明: 作用同上


四、shell重定向的一些高級(jí)用法

1.重定向標(biāo)準(zhǔn)錯(cuò)誤
例子1:

復(fù)制代碼 代碼如下:
command 2> /dev/null

如果command執(zhí)行出錯(cuò),將錯(cuò)誤的信息重定向到空設(shè)備
例子2:
復(fù)制代碼 代碼如下:
command > out.put 2>1

將command執(zhí)行的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到out.put(也就是說(shuō)不管command執(zhí)行正確還是錯(cuò)誤,輸出都打印到out.put)。

2.exec用法
exec命令可以用來(lái)替代當(dāng)前shell;換句話說(shuō),并沒(méi)有啟動(dòng)子shell,使用這一條命令時(shí)任何現(xiàn)有環(huán)境變量將會(huì)被清除,并重新啟動(dòng)一個(gè)shell(重新輸入用戶名和密碼進(jìn)入)。

復(fù)制代碼 代碼如下:
exec command

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


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。然后通過(guò)exec打開(kāi)文件描述符3;
然后,通過(guò)read命令讀取name.txt的第一行內(nèi)容line1,第二行內(nèi)容line2,通過(guò)Exec 03關(guān)閉文件描述符3;
最后,用echo命令輸出line1和line2。最好在終端運(yùn)行一下這個(gè)腳本,親自嘗試一下。

例子2:

復(fù)制代碼 代碼如下:
exec 3>test.sh;
#打開(kāi)test.sh可讀寫操作,與文件描述符3綁定

while read line3
 do
    echo $line;
done

#循環(huán)讀取文件描述符3(讀取的是test.sh內(nèi)容)
復(fù)制代碼 代碼如下:
exec 3>-
exec 3-

#關(guān)閉文件的,輸入,輸出綁定

五、bash shell 重定向的幾個(gè)特殊文件

文件 說(shuō)明
/dev/stdin 文件描述符 0 的復(fù)制品
/dev/stdout 文件描述符 1 的復(fù)制品
/dev/stderr 文件描述符 2 的復(fù)制品
/dev/fd/n 文件描述符 n 的復(fù)制品
/dev/tcp/host/port Bash 在 port 打開(kāi)到 host 的 TCP 連接
/dev/udp/host/port Bash 在 port 打開(kāi)到 host 的 UDP 連接
您可能感興趣的文章:
  • shell 1>&2 2>&1 &>filename重定向的含義和區(qū)別
  • linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析
  • shell常用重定向?qū)嵗v解
  • linux shell 管道命令(pipe)使用及與shell重定向區(qū)別
  • linux shell 腳本實(shí)現(xiàn)tcp/upd協(xié)議通訊(重定向應(yīng)用)
  • shell腳本中取消重定向的方法實(shí)例
  • Windows Powershell 管道和重定向
  • Shell腳步攻略之管道重定向基礎(chǔ)
  • Shell中重定向的深入講解

標(biāo)簽:淘寶邀評(píng) 赤峰 許昌 邵陽(yáng) 巴彥淖爾 馬鞍山 金昌 婁底

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux base shell重定向詳解》,本文關(guān)鍵詞  Linux,base,shell,重定向,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux base shell重定向詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Linux base shell重定向詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 芒康县| 乌拉特中旗| 阿克苏市| 九龙坡区| 中牟县| 潼关县| 蒲江县| 尼木县| 东乌珠穆沁旗| 无锡市| 长沙市| 二连浩特市| 平邑县| 凤庆县| 阿尔山市| 醴陵市| 兴国县| 灌阳县| 隆昌县| 池州市| 衡东县| 临清市| 平凉市| 安丘市| 绩溪县| 广南县| 乌鲁木齐县| 湘潭县| 东海县| 紫云| 云梦县| 湖口县| 鄂温| 淮南市| 盐城市| 洛隆县| 济宁市| 鄂尔多斯市| 武乡县| 瑞昌市| 侯马市|