標準輸入/輸出和重定向,Linux發(fā)行版Fedora Core Linux,而Red Hat公司原來Red Hat Linux的開發(fā)團隊也將繼續(xù)參與這一發(fā)行版本的開發(fā)工作。
標準輸入與輸出
我們知道,執(zhí)行一個shell命令行時通常會自動打開三個標準文件,即標準輸入文件(stdin),通常對應終端的鍵盤;標準輸出文件(stdout)和標準錯誤輸出文件(stderr),這兩個文件都對應終端的屏幕。進程將從標準輸入文件中得到輸入數(shù)據(jù),將正常輸出數(shù)據(jù)輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。
我們以cat命令為例,cat命令的功能是從shell命令行給出的文件中讀取數(shù)據(jù),并將這些數(shù)據(jù)直接送到標準輸出。若使用如下命令:
$ cat config 將會把文件config的內(nèi)容依次顯示到屏幕上。但是,如果cat的shell命令行中沒有參數(shù),它就會從標準輸入中讀取數(shù)據(jù),并將其送到標準輸出。例如:
$ cat
Hello world
Hello world
Bye
Bye
用戶輸入的每一行都立刻被cat命令輸出到屏幕上。另一個例子,命令sort按行讀入文件正文(當shell命令行中沒有給出文件名時,表示從標準輸入讀入),將其排序,并將結果送到標準輸出。下面的例子是從標準輸入讀入一個采購單,并將其排序。
$ sort
bananas
carrots
apples
bananas
carrots
這時我們在屏幕上得到了已排序的采購單。直接使用標準輸入/輸出文件存在以下問題:輸入數(shù)據(jù)從終端輸入時,用戶費了半天勁輸入的數(shù)據(jù)只能用一次。下次再想用這些數(shù)據(jù)時就得重新輸入。而且在終端上輸入時,若輸入有誤修改起來不是很方便。輸出到終端屏幕上的信息只能看不能動。我們無法對此輸出作更多處理,如將輸出作為另一命令的輸入進行進一步的處理等。為了解決上述問題,Linux系統(tǒng)為輸入、輸出的傳送引入了另外兩種機制,即輸入/輸出重定向和管道。
輸入重定向
輸入重定向是指把命令(或可執(zhí)行程序)的標準輸入重定向到指定的文件中。也就是說,輸入可以不來自鍵盤,而來自一個指定的文件。所以說,輸入重定向主要用于改變一個命令的輸入源,特別是改變那些需要大量輸入的輸入源。例如,命令wc統(tǒng)計指定文件包含的行數(shù)、單詞數(shù)和字符數(shù)。如果僅在shell命令行上鍵入:
$wc
wc將等待用戶告訴它統(tǒng)計什么,這時shell就好象死了一樣,從鍵盤鍵入的所有文本都出現(xiàn)在屏幕上,但并沒有什么結果,直至按下<ctrl+d>,wc才將命令結果寫在屏幕上。如果給出一個文件名作為wc命令的參數(shù),如下例所示,wc將返回該文件所包含的行數(shù)、單詞數(shù)和字符數(shù)。
$ wc /etc/passwd
20 23 726 /etc/passwd 另一種把/etc/passwd文件內(nèi)容傳給wc命令的方法是重定向wc的輸入。輸入重定向的一般形式為:命令文件名。可以用下面的命令把wc命令的輸入重定向為/etc/passwd文件:
$ wc /etc/passwd
20 23 726
另一種輸入重定向稱為here文檔,它告訴shell當前命令的標準輸入來自shell命令行。here文檔的重定向操作符使用。它將一對分隔符(本例中用delim表示)之間的正文重定向輸入給命令。下例將一對分隔符delim之間的正文作為wc命令的輸入,統(tǒng)計出正文的行數(shù)、單詞數(shù)和字符數(shù)。
$ wc>this text forms the content
>of the here document,which
>continues until the end of
>text delimter
>delim
在操作符后面,任何字符都可以作為正文開始前的分隔符,本例中使用delim作為分隔符。here文檔的正文一直延續(xù)到遇見另一個分隔符為止。第二個分隔符應出現(xiàn)在新行的開頭。這時here文檔的正文(不包括開始和結束的分隔符)將重新定向送給命令wc作為它的標準輸入。
以上對shell命令行的使用。
您可能感興趣的文章:- 關于shell命令的定向輸出 2gt;1
- 用shell命令讀取與輸出數(shù)據(jù)的代碼
- 遠程linux xshell下輸出中文亂碼解決方法
- linux c程序中獲取shell腳本輸出的實現(xiàn)方法
- linux shell的輸出效果修改方法(界面顏色)
- Shell腳本對文件中的行、單詞、字符進行迭代輸出示例
- shell腳本echo輸出不換行功能增強實例
- 一個簡單的轉換輸出的shell腳本代碼
- shell學習之printf命令格式化輸出語句