Shell中重定向的深入講解
標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤
一個(gè)程序的的輸入可以來(lái)自于鍵盤,也可以來(lái)自于文件或者其他設(shè)備;同樣的,一個(gè)程序也可以將輸出顯示在屏幕或者保存到文件中。這就涉及到標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。
程序的輸入是標(biāo)準(zhǔn)輸入,默認(rèn)是鍵盤,用戶可以將其指定為文件或其他設(shè)備。
程序的輸出有兩種,即標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,其中標(biāo)準(zhǔn)輸出是程序的正常輸出、標(biāo)準(zhǔn)錯(cuò)誤是程序的錯(cuò)誤輸出。二者默認(rèn)都被指定為屏幕,用戶可以將其指定為文件或其他設(shè)備。
下面的程序從鍵盤讀取輸入,將結(jié)果顯示在屏幕上,即標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都采用默認(rèn)的設(shè)置:
$ ls ~ hello.txt homework name source.list.bk
重定向
用戶可以對(duì)輸入和輸出進(jìn)行重定向,即指定標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。
標(biāo)準(zhǔn)輸入使用<進(jìn)行指定,下面的命令將input文件作為sort命令的輸入,即將sort命令的標(biāo)準(zhǔn)輸入重定向?yàn)閕nput文件:
$ cat input zhao qian sun li zhou wu zheng wang $ sort < input li qian sun wang wu zhao zheng zhou
本例中input文件作為sort命令的標(biāo)準(zhǔn)輸入。
使用>重定向標(biāo)準(zhǔn)輸出:
$ ls ~ > output $ cat output hello.txt homework input name output source.list.bk
如上所示,ls ~的標(biāo)準(zhǔn)輸出被重定向?yàn)閛utput,因此其輸出被寫入output文件。
需要注意的是,如果output不存在,將自動(dòng)創(chuàng)建output文件;如果output存在,那么將清空output的內(nèi)容,并寫入新的內(nèi)容。
如果只是想在輸出文件的已有內(nèi)容的末尾追加,可以使用>>:
$ date >> output $ cat output hello.txt homework input name output source.list.bk Sat Jun 30 18:18:53 CST 2018
下面的命令將標(biāo)準(zhǔn)輸入重定向?yàn)閕nput,將標(biāo)準(zhǔn)輸出重定向?yàn)閛utput:
$ sort < input > output # 覆蓋output內(nèi)容 $ sort < input >> output # 在output末尾追加內(nèi)容
文件描述符
每個(gè)輸入源和輸出地都有一個(gè)描述符,標(biāo)準(zhǔn)輸入的描述符為0,標(biāo)準(zhǔn)輸出的描述符為1,標(biāo)準(zhǔn)錯(cuò)誤的描述符為2。
使用0<重定向標(biāo)準(zhǔn)輸入,事實(shí)上,由于程序的默認(rèn)重定向輸入即為標(biāo)準(zhǔn)輸入,所以下面的兩條命令是等價(jià)的:
$ sort < input $ sort 0< input
同樣的,程序的默認(rèn)重定向輸出為標(biāo)準(zhǔn)輸出,所以下面的兩條命令也是等價(jià)的:
$ ls > output $ ls 1> output
下面的命令將標(biāo)準(zhǔn)輸入重定向?yàn)閕nput文件,標(biāo)準(zhǔn)輸出重定向?yàn)閛utput文件(追加),將標(biāo)準(zhǔn)錯(cuò)誤重定向?yàn)閑rror文件:
$ sort < input 1>> output 2> error
組合標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤
下面的命令將標(biāo)準(zhǔn)輸出重定向?yàn)閛utput文件,標(biāo)準(zhǔn)錯(cuò)誤仍然顯示在屏幕上:
$ sort < input > output
下面的命令將標(biāo)準(zhǔn)輸出重定向?yàn)閛utput文件,將標(biāo)準(zhǔn)錯(cuò)誤重定向?yàn)閑rror文件:
$ sort < input > output 2> error
下面的命令將標(biāo)準(zhǔn)輸出重定向?yàn)閛utput文件,使用2>&1將標(biāo)準(zhǔn)錯(cuò)誤重定向?yàn)闃?biāo)準(zhǔn)輸出:
$ sort < input > output 2>&1
上面的例子中,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都會(huì)被重定向?yàn)閛utput文件。
注意,下面的命令將導(dǎo)致標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤的相互覆蓋,因此不可使用:
$ sort < input > output 2> output
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
常用的34個(gè)Linux?Shell腳本(小結(jié))
本文主要介紹了常用的35個(gè)Linux?Shell腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05linux使用update-alternatives切換java版本
這篇文章主要介紹了linux使用update-alternatives切換java版本的相關(guān)資料,需要的朋友可以參考下2017-04-04Shell腳本實(shí)現(xiàn)查找字符串中某字符最后出現(xiàn)的位置
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)查找字符串中某字符最后出現(xiàn)的位置,本文給出了Shell腳本和C語(yǔ)言程序的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-01-01linux C語(yǔ)言開(kāi)發(fā)管道通信實(shí)例詳解
這篇文章主要介紹了linux C語(yǔ)言開(kāi)發(fā)管道通信實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01Shell腳本統(tǒng)計(jì)文件行數(shù)的8種方法
這篇文章主要介紹了Shell腳本統(tǒng)計(jì)文件行數(shù)的8種方法,本文講解了獲取單個(gè)文件行數(shù)、獲取特定目錄所有文件的行數(shù)兩種需求共計(jì)8種方法,需要的朋友可以參考下2015-03-03fedora 23 lvm2格式 根目錄磁盤空間不足 擴(kuò)容方法
下面小編就為大家?guī)?lái)一篇fedora 23 lvm2格式 根目錄磁盤空間不足 擴(kuò)容方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02