版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章Shell重定向11.1輸入和輸出幾乎所有命令都會(huì)產(chǎn)生到屏幕的輸出和從鍵盤獲取輸入,而在Linux系統(tǒng)中可以將輸出發(fā)送到指定的文件,或從文件中讀取輸入。每一個(gè)Shell命令都有它自己的輸入和輸出。在一個(gè)命令執(zhí)行之前,它的輸入和輸出可以使用由Shell解釋的特殊標(biāo)記重定向。例如,將date命令的輸出發(fā)送到文件而不是屏幕。改變輸入或輸出的默認(rèn)路徑就叫做重定向。在Linux中一切皆文件,所以你的硬件在Linux系統(tǒng)中同樣地表示為文件:0–標(biāo)準(zhǔn)輸入–鍵盤:從文件(默認(rèn)是鍵盤)讀取輸入。1–標(biāo)準(zhǔn)輸出–屏幕:發(fā)送數(shù)據(jù)到文件(默認(rèn)是屏幕)。2–標(biāo)準(zhǔn)錯(cuò)誤–屏幕:發(fā)送所有錯(cuò)誤信息到一個(gè)文件(默認(rèn)是屏幕)。上述的三個(gè)數(shù)字是標(biāo)準(zhǔn)的POSIX字符,也稱為文件描述符。每個(gè)Linux命令都會(huì)使用上述的流與用戶或其它系統(tǒng)程序進(jìn)行交互。11.1.1標(biāo)準(zhǔn)輸入在Shell運(yùn)行任何命令之前,它先嘗試打開(kāi)文件進(jìn)行讀取。如果打開(kāi)文件失敗,Shell將以一個(gè)錯(cuò)誤退出并不運(yùn)行命令。如果打開(kāi)文件成功,Shell使用打開(kāi)的文件的文件描述符作為命令的標(biāo)準(zhǔn)輸入文件描述符。標(biāo)準(zhǔn)輸入具有如下特點(diǎn):它是默認(rèn)的輸入方法,它被所有命令使用來(lái)讀取輸入。它用數(shù)字0表示。它也被稱作stdin。默認(rèn)的標(biāo)準(zhǔn)輸入設(shè)備是鍵盤。操作符‘<’是輸入重定向操作符,其語(yǔ)法如下所示:$command<input_filename11.1.2標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)輸出具有如下特點(diǎn):它被命令用來(lái)寫(xiě)入或顯示命令自身的輸出。它用數(shù)字1表示。它也被稱作stdout。默認(rèn)的標(biāo)準(zhǔn)輸出設(shè)備是屏幕。操作符‘>’是輸出重定向操作符,它的語(yǔ)法如下所示:$command>output_filename上述語(yǔ)法中,Shell首先嘗試打開(kāi)用于寫(xiě)入的文件output_filename,如果成功,就將命令的標(biāo)準(zhǔn)輸出發(fā)送到新打開(kāi)的文件。如果文件打開(kāi)失敗,整個(gè)命令就會(huì)失敗。命令command>output_filenam與command1>output_filename具有相同的含義。數(shù)字1表示標(biāo)準(zhǔn)輸出。例如,保留ls的輸出到名稱為output.txt的文件:$ls>/tmp/output.txt11.1.3標(biāo)準(zhǔn)錯(cuò)誤標(biāo)準(zhǔn)錯(cuò)誤具有如下特點(diǎn):它是默認(rèn)的錯(cuò)誤輸出方法,它被用于寫(xiě)入所有系統(tǒng)錯(cuò)誤信息。它用數(shù)字2表示。它也被稱為stderr。默認(rèn)的標(biāo)準(zhǔn)輸出設(shè)備是屏幕或顯示器。操作符‘2>’是標(biāo)準(zhǔn)錯(cuò)誤重定向操作符,其語(yǔ)法如下所示:$command2>errors_filenameShell首先打開(kāi)文件errors_filename用于寫(xiě)入,獲得這個(gè)文件的文件描述符,并用它替換文件描述符2。所示現(xiàn)在任何寫(xiě)到標(biāo)準(zhǔn)錯(cuò)誤的內(nèi)容都會(huì)被寫(xiě)到文件errors_filename。例如,將腳本script_name.sh運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤信息發(fā)送到名稱為errors.txt的文件,以便你可以稍后復(fù)查這些錯(cuò)誤信息,其命令類似如下所示:$./script_name.sh2>errors.txt$caterrors.txt11.2重定向11.2.1文件重定向文件重定向是更改一個(gè)文件描述符以指向一個(gè)文件。我們先來(lái)看一個(gè)輸出重定向:$echo"Today'sdateis$(date).">date.txt$catdate.txtToday'sdateisSat,Nov16,201310:53:40AM.操作符‘>’開(kāi)始一個(gè)輸出重定向。重定向默認(rèn)只適用于一條命令(在上述示例中,是echo命令)。當(dāng)Bash運(yùn)行命令時(shí),它告訴Bash,標(biāo)準(zhǔn)輸出(stdout)應(yīng)當(dāng)指向一個(gè)文件(在上述示例中是文件date.txt),而不是它之前指向的地方。因此,echo命令將不會(huì)把它的輸出發(fā)送到終端;而是“>date.txt”重定向更改了標(biāo)準(zhǔn)輸出描述符的目標(biāo),所以它現(xiàn)在指向了叫做“date.txt”的文件。要注意的是,這個(gè)重定向發(fā)生在echo命令執(zhí)行之前。默認(rèn)情況下,Bash并不首先檢查文件date.txt是否存在,它只是打開(kāi)這個(gè)文件,如果這個(gè)文件已經(jīng)存在,文件中先前的內(nèi)容將會(huì)丟失。如果文件不存在,則會(huì)被創(chuàng)建為一個(gè)空文件,以便文件描述符可以指向它。11.2.1文件重定向應(yīng)該注意的是,這個(gè)重定向只對(duì)它應(yīng)用于的單個(gè)命令(上述示例中是echo)有效。再此之后執(zhí)行的其它命令將繼續(xù)把它們的輸出發(fā)送到腳本的標(biāo)準(zhǔn)輸出位置。在上述實(shí)例中,我們?cè)趀cho命令之后就使用了cat命令打印文件date.txt的內(nèi)容,它將文件的內(nèi)容寫(xiě)到了標(biāo)準(zhǔn)輸出(終端或屏幕)。注意:在網(wǎng)上有太多的代碼實(shí)例和Shell教程告訴你讀取文件的內(nèi)容時(shí)要使用cat。這并不是必須的。cat命令只是較好地用于把多個(gè)文件連接在一起,或作為Shell命令行提示符中查看文件內(nèi)容的快速工具。在你的腳本中,你不應(yīng)該使用cat命令來(lái)管道文件到命令,而應(yīng)該使用重定向。請(qǐng)注意這一點(diǎn)。無(wú)效的使用cat命令將導(dǎo)致額外的進(jìn)程被創(chuàng)建。11.2.1文件重定向當(dāng)我們不指定任何參數(shù)而直接使用cat命令時(shí),它顯然不知道該讀哪個(gè)文件。在這種情況下,cat命令將只從標(biāo)準(zhǔn)輸入而不是從文件讀取數(shù)據(jù)。由于標(biāo)準(zhǔn)輸入通常不是一個(gè)正規(guī)的文件,直接不帶任何參數(shù)地運(yùn)行cat命令將似乎什么都不做:$cat它甚至也不顯示Shell命令行提示符。其實(shí)此時(shí)cat仍在從標(biāo)準(zhǔn)輸入,即你的終端進(jìn)行讀取?,F(xiàn)在你在鍵盤上輸入的任何內(nèi)容在你輸入回車鍵后都將發(fā)送到cat命令。你輸入的每一行,cat命令都會(huì)像它通常所做的一樣:顯示它讀取的內(nèi)容到標(biāo)準(zhǔn)輸出,和它在前面的示例中顯示date.txt的內(nèi)容到標(biāo)準(zhǔn)輸出的方法一樣。11.2.1文件重定向$cathelloworldhelloworld為什么“helloworld”顯示了兩次?首先,終端實(shí)際上比它們本身看上去更復(fù)雜,它們有不同的工作模式。在上述示例中使用的模式是標(biāo)準(zhǔn)模式,在這一模式中,終端將回顯你輸入的每一個(gè)字符,并允許你對(duì)你的輸入進(jìn)行極其簡(jiǎn)易的編輯(例如,使用退格鍵)。你輸入的內(nèi)容并不真正發(fā)送到應(yīng)用程序,直到你按下回車鍵。比如,你輸入“helloworld”,你將看到它被終端自身打印到屏幕上。一旦你按下回車鍵,整行內(nèi)容將變?yōu)閷?duì)從終端讀取數(shù)據(jù)的應(yīng)用程序(比如,cat命令)可用。cat命令從標(biāo)準(zhǔn)輸入讀入行,然后將其顯示到同樣是你的終端的標(biāo)準(zhǔn)輸出。所以,第二行仍是“helloworld”。11.2.1文件重定向你可以鍵入“CTRL+D”來(lái)向你的終端發(fā)送文件結(jié)束符。這將使cat命令認(rèn)為標(biāo)準(zhǔn)輸入已關(guān)閉。它將停止讀取,并終結(jié)。Bash將會(huì)看到cat命令已被終結(jié),便把Shell命令行提示符返還給你?,F(xiàn)在我們使用輸入重定向?qū)⒁粋€(gè)文件連接到標(biāo)準(zhǔn)輸入,以便標(biāo)準(zhǔn)輸入不再?gòu)奈覀兊逆I盤讀取,而是從文件讀?。?cat<date.txtToday'sdateisSat,Nov16,201310:53:40AM.這個(gè)結(jié)果與我們先前使用“catdate.txt”得到的結(jié)果完全一致,除了這次的使用方法稍有不同。在我們的第一個(gè)例子中,cat命令為文件date.txt打開(kāi)了一個(gè)文件描述符,并通過(guò)這個(gè)文件描述符讀取文件的內(nèi)容。在第二個(gè)例子中,cat命令僅從標(biāo)準(zhǔn)輸入讀取,與它從我們的鍵盤進(jìn)行讀取相似。然而,這次“<data.txt”操作已經(jīng)修改了cat的標(biāo)準(zhǔn)輸入,以使它的數(shù)據(jù)源變?yōu)榱宋募ate.txt,而不是我們的鍵盤。11.2.2實(shí)例:從文件輸入下面我們通過(guò)一些實(shí)例,來(lái)進(jìn)一步學(xué)習(xí)使用輸入重定向從文件讀取內(nèi)容的一些方法。比如,在Shell腳本中我們針對(duì)某一個(gè)代碼塊使用輸入重定向。11.2.3實(shí)例:從文本或字符串輸入Bash還有一種重定向的類型是here-documents,here-documents重定向的操作符是“<<MARKER”。這個(gè)操作符指示Bash從標(biāo)準(zhǔn)輸入讀取輸入的內(nèi)容直到讀取到只包含MARKER的行為止。here-documents的語(yǔ)法格式如下所示:$command<<[-]MARKER HereDocumentMARKER在here-documents中,我們選擇一個(gè)單詞作為一個(gè)標(biāo)志。它可以是任何一個(gè)單詞,比如,MARKER、END、EOF等等。但要選擇一個(gè)不會(huì)在你的數(shù)據(jù)集合中出現(xiàn)的單詞。在第一個(gè)標(biāo)志(比如,<<MARKER)和第二個(gè)標(biāo)志(MARKER)之間的所有行都會(huì)被作為命令的標(biāo)準(zhǔn)輸入。而且第二個(gè)標(biāo)志(MARKER)必須獨(dú)占一行。11.2.4實(shí)例:空文件創(chuàng)建創(chuàng)建一個(gè)空文件的語(yǔ)法如下所示:$>filename操作符“>”重定向輸出到一個(gè)文件。如果沒(méi)有命令指定并且文件filename不存在的話,Bash將會(huì)創(chuàng)建一個(gè)空文件。11.2.5實(shí)例:/dev/null丟棄不需要的輸出寫(xiě)入到/dev/null的所有數(shù)據(jù)都將被系統(tǒng)丟棄。所以我們可以將任何不想要的程序或命令的輸出發(fā)送到/dev/null。重定向命令的標(biāo)準(zhǔn)輸出信息到/dev/null的語(yǔ)法如下所示:$command>/dev/null重定向命令的標(biāo)準(zhǔn)錯(cuò)誤信息到/dev/null的語(yǔ)法如下所示:$command2>/dev/null同時(shí)重定向命令的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤的信息到/dev/null的語(yǔ)法如下所示:$command&>/dev/null或$command>&/dev/null或$command>/dev/null2>&111.2.6實(shí)例:標(biāo)準(zhǔn)錯(cuò)誤重定向在11.1.3節(jié)中我們已經(jīng)學(xué)習(xí)了標(biāo)準(zhǔn)錯(cuò)誤,并簡(jiǎn)單了解了標(biāo)準(zhǔn)錯(cuò)誤重定向,符號(hào)“2>”即為標(biāo)準(zhǔn)錯(cuò)誤重定向操作符。此節(jié)我們將通過(guò)一些實(shí)例來(lái)進(jìn)一步學(xué)習(xí)標(biāo)準(zhǔn)錯(cuò)誤重定向。例如,我們使用find命名命令查找當(dāng)前目錄下以“core”為前綴的文件,將其刪除,并將刪除時(shí)產(chǎn)生的錯(cuò)誤信息重定向到error.log文件。$find.-name"core.*"-execrm-f{}\;2>/tmp/error.log如果我們想忽略這些錯(cuò)誤信息,則可以直接將這些錯(cuò)誤信息重定向到/dev/null:$find.-name"core.*"-execrm-f{}\;2>/dev/null又例如,我想在當(dāng)前目錄下的所有文件中,查找包含指定關(guān)鍵字KEYWORD的文件,并將所有錯(cuò)誤信息保存到grep.err文件中:grepKEYWORD*2>grep.err如果想把另一個(gè)grep命令的錯(cuò)誤信息也追加到grep.err文件中,則使用“>>”操作符進(jìn)行追加:grepKEYWORD1*2>>grep.err我們也可以將腳本的錯(cuò)誤信息進(jìn)行重定向:./script.sh2>error.log/path/to/perl_example.pl2>error.log/path/to/python_example.py2>error.log11.2.7實(shí)例:標(biāo)準(zhǔn)輸出重定向在11.1.2節(jié)中我們同樣已經(jīng)學(xué)習(xí)了標(biāo)準(zhǔn)輸出,并簡(jiǎn)單了解了標(biāo)準(zhǔn)輸出重定向,符號(hào)“>”即為標(biāo)準(zhǔn)輸出重定向操作符。此節(jié)我們將通過(guò)一些實(shí)例來(lái)進(jìn)一步學(xué)習(xí)標(biāo)準(zhǔn)輸出重定向。11.2.8實(shí)例:標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出同時(shí)重定向同時(shí)將標(biāo)準(zhǔn)錯(cuò)誤和標(biāo)準(zhǔn)輸出進(jìn)行重定向的語(yǔ)法如下所示:command&>filenamecommand>&filenamecommand>filename2>&1command2>&1>filename11.2.9實(shí)例:追加重定向輸出符號(hào)“>>”用于追加重定向輸出,其語(yǔ)法如下所示:command>>filename例如,追加一個(gè)腳本的輸出到一個(gè)文件:$./example.sh>>data.txt將兩個(gè)文件的內(nèi)容追加到另一個(gè)文件中:$catfile1file2>>file3將命令的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都追加到一個(gè)日志文件中:$(./configure&&make&&makeinstall)>>/tmp/make.log2>&1或$(./configure&&make&&makeinstall)2>&1>>/tmp/make.log11.2.10實(shí)例:在單命令行進(jìn)行標(biāo)準(zhǔn)輸入輸出重定向我們可以在一條命令行中完成標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出的重定向,其語(yǔ)法如下所示:command<input-file>output-file或<input-filecommand>output-file例如,我們要將一個(gè)文件的內(nèi)容都轉(zhuǎn)換為小寫(xiě),并將轉(zhuǎn)換后的內(nèi)容寫(xiě)入新的文件:$trA-Za-z<filename>new_filename11.3文件描述符11.3.1實(shí)例:使用exec命令Bash的內(nèi)部命令exec的功能之一就是允許我們操作文件描述符。如果在exec之后沒(méi)有指定命令,則exec命令之后的重定向?qū)⒏漠?dāng)前Shell的文件描述符。例如,在命令“exec2>file”之后運(yùn)行的所有命令,都會(huì)將其產(chǎn)生的錯(cuò)誤信息發(fā)送到文件file中,就像你的命令在腳本myscript.sh中,而你運(yùn)行的是“./myscript.sh>2file”。比如,如果你想記錄你的腳本中的命令產(chǎn)生的錯(cuò)誤信息,你就可以在腳本的開(kāi)頭使用類似如下的命令:exec2>errors.log11.3.2實(shí)例:指定用于輸入的文件描述符在前面的章節(jié)我們已經(jīng)了解到,文件描述符0、1和2是分別為標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤保留的。然而,Shell允許你給一個(gè)輸入文件或輸出文件指定一個(gè)文件描述符。這樣可以提高文件讀取和寫(xiě)入的性能。這類文件描述符被稱為用戶自定義文件描述符。給一個(gè)輸入文件指定一個(gè)文件描述符的語(yǔ)法如下所示:$exec[n]<file其中,[n]即是文件描述符,如果不指定n,則表示標(biāo)準(zhǔn)輸入(文件描述符0)。上述的輸入重定向會(huì)在文件描述符n上打開(kāi)一個(gè)用于讀取的文件file。例如,我執(zhí)行如下命令,將文件描述符3指定給文件/etc/passwd以用于從中讀取數(shù)據(jù):$exec3</etc/passwd現(xiàn)在我們就可以在文件描述符3上讀取此文件的內(nèi)容,比如,使用grep命令來(lái)查找指定賬號(hào)的信息:$grepyantaol<&3yantaol:x:12107:25:example:/home/yantaol:/bin/bash在上述命令中,我們使用了操作符“<&”,它也是用一種重定向操作符,用于復(fù)制輸入文件描述符。其語(yǔ)法如下所示:[n]<&word11.3.3實(shí)例:指定用于輸出的文件描述符給一個(gè)輸出文件指定一個(gè)文件描述符的語(yǔ)法如下所示:$exec[n]>file其中,[n]即是文件描述符,如果不指定n,則表示標(biāo)準(zhǔn)輸出(文件描述符1)。上述的輸出重定向會(huì)在文件描述符n上打開(kāi)一個(gè)用于寫(xiě)入的文件file。如果文件file不存在,則它將被創(chuàng)建。如果文件已存在,則它被清空為0字節(jié)。11.3.4實(shí)例:關(guān)閉文件描述符細(xì)心的你可能已經(jīng)注意到了在前兩節(jié)的實(shí)例腳本中所使用的關(guān)閉文件描述符的命令。沒(méi)錯(cuò),關(guān)閉文件描述符的操作很簡(jiǎn)單,其語(yǔ)法如下所示:[n]<&-或[n]>&-比如,關(guān)閉標(biāo)準(zhǔn)輸入就是“<&-”,而關(guān)閉標(biāo)準(zhǔn)錯(cuò)誤就是2>&-。盡管操作系統(tǒng)會(huì)把無(wú)用垃圾清理掉,但在適時(shí)地關(guān)閉你自己打開(kāi)的文件描述符仍然是一個(gè)好習(xí)慣。例如,你使用命令“exec5>file”打開(kāi)了一個(gè)文件描述符,此命令之后的所有命令都將繼承這個(gè)文件描述符。在這里,你做如下的操作可能會(huì)更好:$exec5>file…#使用文件描述符5的命令…$exec3>&-#接下來(lái)的命令不再需要使用文件描述符5但我也見(jiàn)過(guò)有的用戶使用這個(gè)方法來(lái)丟棄不需要的輸出,比如,丟棄標(biāo)準(zhǔn)錯(cuò)誤輸出,使用類似如下的命令:$command2>&-盡管使用這種方法可以將標(biāo)準(zhǔn)錯(cuò)誤輸出丟棄掉,但我不確定你是否能期待所有的應(yīng)用程序在關(guān)閉標(biāo)準(zhǔn)錯(cuò)誤的情況下都能正常運(yùn)行。在不確定的情況下,我寧愿使用2>/dev/null來(lái)丟棄標(biāo)準(zhǔn)錯(cuò)誤輸出。11.3.5實(shí)例:打開(kāi)用于讀和寫(xiě)的文件描述符Bash支持使用如下語(yǔ)法在文件描述符上打開(kāi)一個(gè)即可讀取又可寫(xiě)入的文件:$exec[n]<>file其中,[n]即是文件描述符,如果不指定n,則默認(rèn)表示標(biāo)準(zhǔn)輸入。如果文件file不存在,則將會(huì)被創(chuàng)建。符號(hào)“<>”是Bash中菱形操作符,這個(gè)操作符就是用于打開(kāi)一個(gè)可讀寫(xiě)的操作符。這個(gè)語(yǔ)法對(duì)更新文件很有用。11.3.6實(shí)例:在同一腳本中使用exec進(jìn)行輸入和輸出重定向在前面的幾節(jié)的實(shí)例腳本中,我們都是只使用exec命令進(jìn)行了輸入重定向或輸出重定向。而在這一節(jié)中,我們將通過(guò)幾個(gè)實(shí)例腳本來(lái)學(xué)習(xí),如何在同一腳本中使用exec命令即進(jìn)行輸入重定向又進(jìn)行輸出重定向。11.4小結(jié)下面我們總結(jié)一下本章所學(xué)的主要知識(shí):改變輸入或輸出的默認(rèn)路徑就叫做重定向。在Linux中一切皆文件,所以你的硬件在Linux系統(tǒng)中同樣地表示為文件:0–標(biāo)準(zhǔn)輸入–鍵盤:從文件(默認(rèn)是鍵盤)讀取輸入。1–標(biāo)準(zhǔn)輸出–屏幕:發(fā)送數(shù)據(jù)到文件(默認(rèn)是屏幕)。2–標(biāo)準(zhǔn)錯(cuò)誤–屏幕:發(fā)送所有錯(cuò)誤信息到一個(gè)文件(默認(rèn)是屏幕)。標(biāo)準(zhǔn)輸入具有如下特點(diǎn):它是默認(rèn)的輸入方法,它被所有命令使用來(lái)讀取輸入;它用數(shù)字0表示;它也被稱作stdin;默認(rèn)的標(biāo)準(zhǔn)輸入設(shè)備是鍵盤。標(biāo)準(zhǔn)輸出具有如下特點(diǎn):它被命令用來(lái)寫(xiě)入或顯示命令自身的輸出;它用數(shù)字1表示;它也被稱作stdout;默認(rèn)的標(biāo)準(zhǔn)輸出設(shè)備是屏幕。標(biāo)準(zhǔn)錯(cuò)誤具有如下特點(diǎn):它是默認(rèn)的錯(cuò)誤輸出方法,它被用于寫(xiě)入所有系統(tǒng)錯(cuò)誤信息;它用數(shù)字2表示;它也被稱為stderr;默認(rèn)的標(biāo)準(zhǔn)輸出設(shè)備是屏幕或顯示器。在Linux中,總有三個(gè)默認(rèn)的設(shè)備文件是打開(kāi)的,即標(biāo)準(zhǔn)輸入stdin(鍵盤)、標(biāo)準(zhǔn)輸出stdout(屏幕)和標(biāo)準(zhǔn)錯(cuò)誤stderr(輸出到屏幕的錯(cuò)誤信息)。11.4小結(jié)重定向簡(jiǎn)單地說(shuō)就是從文件、命令、程序、腳本,甚至是腳本中的代碼塊獲取輸出并把它作為輸入發(fā)送到另一個(gè)文件、命令、程序或腳本。文件重定向是更改一個(gè)文件描述符以指向一個(gè)文件。當(dāng)一個(gè)應(yīng)用程序需要文件數(shù)據(jù)并且它的創(chuàng)建是為從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)時(shí),使用重定向是一個(gè)好主意。在網(wǎng)上有很多不好的示例都是告訴你將cat的輸出管道到進(jìn)程,但這是一個(gè)很糟糕的主意。當(dāng)設(shè)計(jì)一個(gè)可以從各種不同的源頭提供數(shù)據(jù)的應(yīng)用程序時(shí),通常最好讓你的應(yīng)用程序從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)。這樣,用戶就可以使用重定向來(lái)獲取他想要的數(shù)據(jù)。Bash還有一種重定向的類型是here-documents,here-documents重定向的操作符是“<<MARKER”。這個(gè)操作符指示Bash從標(biāo)準(zhǔn)輸入讀取輸入的內(nèi)容直到讀取到只包含MARKER的行為止。重定向操作符(<<)和定界標(biāo)示符(END)之間不需要使用空格分隔,“<<END”和“<<END”兩種寫(xiě)法都可以。終結(jié)字符串END必須寫(xiě)在行首。11.4小結(jié)如果你嘗試在你的腳本嵌入一小塊多行數(shù)據(jù),使用here-documents是很有用的。使用here-documents嵌入很大的數(shù)據(jù)塊是一個(gè)不好的習(xí)慣。你應(yīng)該保持你的邏輯(你的代碼)與你的輸入(你的數(shù)據(jù))分離,最好是在不同的文件中,除非是你的輸入一個(gè)很小的數(shù)據(jù)集。here-strings是here-documen
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新材料研發(fā)財(cái)產(chǎn)抵押合同3篇
- 2025年度碧桂園綠色建筑設(shè)計(jì)咨詢與施工總承包服務(wù)協(xié)議3篇
- 2025年度智能交通信號(hào)系統(tǒng)安裝合同示范文本3篇
- 2025年通脈顆粒項(xiàng)目可行性研究報(bào)告
- 2025年私立學(xué)校學(xué)生宿舍床上用品清洗與更換服務(wù)合同3篇
- 2025年度個(gè)人買賣房屋質(zhì)量保證合同4篇
- 2025年浙江物芯數(shù)科技術(shù)有限公司招聘筆試參考題庫(kù)含答案解析
- 二零二五版進(jìn)出口貿(mào)易物流倉(cāng)儲(chǔ)合同2篇
- 2025年江蘇南通天生置業(yè)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年河南衛(wèi)輝投資集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- GB/T 12723-2024單位產(chǎn)品能源消耗限額編制通則
- 2024年廣東省深圳市中考英語(yǔ)試題含解析
- GB/T 16288-2024塑料制品的標(biāo)志
- 麻風(fēng)病防治知識(shí)課件
- 建筑工程施工圖設(shè)計(jì)文件審查辦法
- 干部職級(jí)晉升積分制管理辦法
- 培訓(xùn)機(jī)構(gòu)應(yīng)急預(yù)案6篇
- 北師大版數(shù)學(xué)五年級(jí)上冊(cè)口算專項(xiàng)練習(xí)
- 應(yīng)急物資智能調(diào)配系統(tǒng)解決方案
- 2025年公務(wù)員考試時(shí)政專項(xiàng)測(cè)驗(yàn)100題及答案
- TSG ZF003-2011《爆破片裝置安全技術(shù)監(jiān)察規(guī)程》
評(píng)論
0/150
提交評(píng)論