標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤
一個程序的的輸入可以來自于鍵盤舔痪,也可以來自于文件或者其他設(shè)備;同樣的锌唾,一個程序也可以將輸出顯示在屏幕或者保存到文件中锄码。這就涉及到標(biāo)準(zhǔn)輸入夺英、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤。
程序的輸入是標(biāo)準(zhǔn)輸入滋捶,默認(rèn)是鍵盤痛悯,用戶可以將其指定為文件或其他設(shè)備。
程序的輸出有兩種重窟,即標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤载萌,其中標(biāo)準(zhǔn)輸出是程序的正常輸出、標(biāo)準(zhǔn)錯誤是程序的錯誤輸出巡扇。二者默認(rèn)都被指定為屏幕扭仁,用戶可以將其指定為文件或其他設(shè)備。
下面的程序從鍵盤讀取輸入厅翔,將結(jié)果顯示在屏幕上乖坠,即標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤都采用默認(rèn)的設(shè)置:
$ ls ~
hello.txt homework name source.list.bk
重定向
用戶可以對輸入和輸出進(jìn)行重定向刀闷,即指定標(biāo)準(zhǔn)輸入熊泵、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤。
標(biāo)準(zhǔn)輸入使用<
進(jìn)行指定甸昏,下面的命令將input
文件作為sort
命令的輸入顽分,即將sort
命令的標(biāo)準(zhǔn)輸入重定向?yàn)?code>input文件:
$ 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)?code>output怯邪,因此其輸出被寫入output
文件。
需要注意的是花墩,如果output
不存在悬秉,將自動創(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)?code>input武氓,將標(biāo)準(zhǔn)輸出重定向?yàn)?code>output:
$ sort < input > output # 覆蓋output內(nèi)容
$ sort < input >> output # 在output末尾追加內(nèi)容
文件描述符
每個輸入源和輸出地都有一個描述符,標(biāo)準(zhǔn)輸入的描述符為0仇箱,標(biāo)準(zhǔn)輸出的描述符為1县恕,標(biāo)準(zhǔn)錯誤的描述符為2。
使用0<
重定向標(biāo)準(zhǔn)輸入剂桥,事實(shí)上忠烛,由于程序的默認(rèn)重定向輸入即為標(biāo)準(zhǔn)輸入,所以下面的兩條命令是等價的:
$ sort < input
$ sort 0< input
同樣的权逗,程序的默認(rèn)重定向輸出為標(biāo)準(zhǔn)輸出美尸,所以下面的兩條命令也是等價的:
$ ls > output
$ ls 1> output
下面的命令將標(biāo)準(zhǔn)輸入重定向?yàn)?code>input文件冤议,標(biāo)準(zhǔn)輸出重定向?yàn)?code>output文件(追加),將標(biāo)準(zhǔn)錯誤重定向?yàn)?code>error文件:
$ sort < input 1>> output 2> error
組合標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤
下面的命令將標(biāo)準(zhǔn)輸出重定向?yàn)?code>output文件师坎,標(biāo)準(zhǔn)錯誤仍然顯示在屏幕上:
$ sort < input > output
下面的命令將標(biāo)準(zhǔn)輸出重定向?yàn)?code>output文件恕酸,將標(biāo)準(zhǔn)錯誤重定向?yàn)?code>error文件:
$ sort < input > output 2> error
下面的命令將標(biāo)準(zhǔn)輸出重定向?yàn)?code>output文件,使用2>&1
將標(biāo)準(zhǔn)錯誤重定向?yàn)闃?biāo)準(zhǔn)輸出:
$ sort < input > output 2>&1
上面的例子中胯陋,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤都會被重定向?yàn)?code>output文件蕊温。
注意,下面的命令將導(dǎo)致標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤的相互覆蓋遏乔,因此不可使用:
$ sort < input > output 2> output