《LINUX實(shí)操:Shell輸入/輸出重定向》要點(diǎn):
本文介紹了LINUX實(shí)操:Shell輸入/輸出重定向,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
輸出重定向
重定向一般通過(guò)在命令間插入特定的符號(hào)來(lái)實(shí)現(xiàn).特別的,這些符號(hào)的語(yǔ)法如下所示
上面這個(gè)命令執(zhí)行command1然后將輸出的內(nèi)容存入file1.
注意任何file1內(nèi)的已經(jīng)存在的內(nèi)容將被新內(nèi)容替代.如果要將新內(nèi)容添加在文件末尾,請(qǐng)使用>>操作符.
?
實(shí)例
執(zhí)行下面的 who 命令,它將命令的完整的輸出重定向在用戶文件中(users)
執(zhí)行后,并沒(méi)有在終端輸出信息,這是因?yàn)檩敵鲆驯粡哪J(rèn)的標(biāo)準(zhǔn)輸出設(shè)備(終端)重定向到指定的文件.
你可以使用 cat 命令查看文件內(nèi)容
cat users
h tty7 2017-08-10 11:48 (:0)
輸入重定向
和輸出重定向一樣,Unix 命令也可以從文件獲取輸入,語(yǔ)法為
這樣,本來(lái)需要從鍵盤(pán)獲取輸入的命令會(huì)轉(zhuǎn)移到文件讀取內(nèi)容
注意:輸出重定向是大于號(hào)(>),輸入重定向是小于號(hào)(<)
?
實(shí)例
接著以上實(shí)例,我們需要統(tǒng)計(jì) users 文件的行數(shù),執(zhí)行以下命令
wc(Word Count)命令的功能為統(tǒng)計(jì)指定文件中的字節(jié)數(shù)、字?jǐn)?shù)、行數(shù),并將統(tǒng)計(jì)結(jié)果顯示輸出:-l?統(tǒng)計(jì)行數(shù)
也可以將輸入重定向到 users 文件
注意:上面兩個(gè)例子的結(jié)果不同:第一個(gè)例子,會(huì)輸出文件名;第二個(gè)不會(huì),因?yàn)樗鼉H僅知道從標(biāo)準(zhǔn)輸入讀取內(nèi)容.
command1 < infile > outfile
同時(shí)替換輸入和輸出,執(zhí)行command1,從文件infile讀取內(nèi)容,然后將輸出寫(xiě)入到outfile中.
重定向深入講解
一般情況下,每個(gè) Unix/Linux 命令運(yùn)行時(shí)都會(huì)打開(kāi)三個(gè)文件:
- 標(biāo)準(zhǔn)輸入文件(stdin):stdin的文件描述符為0,Unix程序默認(rèn)從stdin讀取數(shù)據(jù)
- 標(biāo)準(zhǔn)輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認(rèn)向stdout輸出數(shù)據(jù)
- 標(biāo)準(zhǔn)錯(cuò)誤文件(stderr):stderr的文件描述符 為2,Unix程序會(huì)向stderr流中寫(xiě)入錯(cuò)誤信息
默認(rèn)情況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file.
如果希望 stderr 重定向到 file,可以這樣寫(xiě):
如果希望 stderr 追加到 file 文件末尾,可以這樣寫(xiě):
2 表示標(biāo)準(zhǔn)錯(cuò)誤文件(stderr).
如果希望將 stdout 和 stderr 合并后重定向到 file,可以這樣寫(xiě):
$ command > file 2>&1
# 或者
$ command >> file 2>&1
如果希望對(duì) stdin 和 stdout 都重定向,可以這樣寫(xiě):
command 命令將 stdin 重定向到 file1,將 stdout 重定向到 file2
Here Document
Here Document 是 Shell 中的一種特殊的重定向方式,用來(lái)將輸入重定向到一個(gè)交互式 Shell 腳本或程序.
它的基本形式如下:
command << delimiter
document
delimiter
它的作用是將兩個(gè) delimiter 之間的內(nèi)容(document) 作為輸入傳遞給 command.
注意:
結(jié)尾的delimiter 一定要頂格寫(xiě),前面不能有任何字符,后面也不能有任何字符,包含空格和 tab 縮進(jìn).開(kāi)始的delimiter前后的空格會(huì)被忽略掉.
?
實(shí)例
在命令行中通過(guò) wc -l 命令計(jì)算 Here Document 的行數(shù):
$ wc -l << EOF
歡迎來(lái)到
弗雷塞斯
www.cnblogs.com/freescience
EOF
3 # 輸出結(jié)果為 3 行
我們也可以將 Here Document 用在腳本中,例如:
#!/bin/bash
cat << EOF
歡迎來(lái)到
弗雷塞斯
www.cnblogs.com/freescience
EOF
執(zhí)行以上腳本,輸出結(jié)果:
歡迎來(lái)到
弗雷塞斯
www.cnblogs.com/freescience
/dev/null 文件
如果希望執(zhí)行某個(gè)命令,但又不希望在屏幕上顯示輸出結(jié)果,那么可以將輸出重定向到 /dev/null:
/dev/null 是一個(gè)特殊的文件,寫(xiě)入到它的內(nèi)容都會(huì)被丟棄;如果嘗試從該文件讀取內(nèi)容,那么什么也讀不到.但是 /dev/null 文件非常有用,將命令的輸出重定向到它,會(huì)起到"禁止輸出"的效果.
如果希望屏蔽 stdout 和 stderr,可以這樣寫(xiě):
注意:0 是標(biāo)準(zhǔn)輸入(STDIN),1 是標(biāo)準(zhǔn)輸出(STDOUT),2 是標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)
本文永久更新鏈接地址:
歡迎參與《LINUX實(shí)操:Shell輸入/輸出重定向》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9057.html