2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Linux shell的標(biāo)準(zhǔn)輸入、輸出和錯(cuò)誤

 浸心閣 2016-03-17

1.文件描述符

在linux shell執(zhí)行命令時(shí),每個(gè)進(jìn)程都和三個(gè)打開的文件相聯(lián)系,并使用文件描述符來引用這些文件。由于文件描述符不容易記憶,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.


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

2.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.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分界符

2.3.綁定重定向

Command >&m 把標(biāo)準(zhǔn)輸出重定向到文件描述符m中
Command < &- 關(guān)閉標(biāo)準(zhǔn)輸入
Command 0>&- 同上


3.shell重定向的一些高級用法

3.1.重定向標(biāo)準(zhǔn)錯(cuò)誤

例子1:
command 2> /dev/null
如果command執(zhí)行出錯(cuò),將錯(cuò)誤的信息重定向到空設(shè)備
例子2:
command > out.put 2>&1
將command執(zhí)行的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到out.put(也就是說不管command執(zhí)行正確還是錯(cuò)誤,輸出都打印到out.put)。


3.2.exec用法
exec命令可以用來替代當(dāng)前shell;換句話說,并沒有啟動子shell,使用這一條命令時(shí)任何現(xiàn)有環(huán)境變量將會被清除,并重新啟動一個(gè)shell(重新輸入用戶名和密碼進(jìn)入)。
exec command
其中,command通常是一個(gè)shell腳本。
對文件描述符操作的時(shí)候用(也只有再這時(shí)候),它不會覆蓋你當(dāng)前的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的意思是把標(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 0<&3關(guān)閉文件描述符3;

最后,用echo命令輸出line1和line2。最好在終端運(yùn)行一下這個(gè)腳本,親自嘗試一下。


例子2:
exec 3<>test.sh;
#打開test.sh可讀寫操作,與文件描述符3綁定
 
while read line<&3
 do
    echo $line;
done
#循環(huán)讀取文件描述符3(讀取的是test.sh內(nèi)容)
exec 3>&-
exec 3<&-
#關(guān)閉文件的,輸入,輸出綁定


參考:

http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/

http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

http://blog.csdn.net/flowingflying/article/details/5201199

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多