
我們可以看到直接使用cat命令,StreamTest.txt文件的內(nèi)容直接打印在屏幕上。而第二條語句cat StreamTest.txt > outfile1使用了數(shù)據(jù)流重定向,那么這條語句是什么意思呢?它的意思就是把由cat命令所產(chǎn)生的直接輸出到屏幕上的信息輸出到文件outfile1中,并保存。而且你可以看到,原本應在屏幕上輸出的信息并沒有輸出到屏幕上,因為它輸出到了文件outfile1中。這樣你就應該能理解為什么叫數(shù)據(jù)流重定向了吧。值得注意的是,如果outfile1文件不存在于當前目錄下,系統(tǒng)則會自動創(chuàng)建這個文件;如果這個文件已經(jīng)存在于當前目錄下,那么系統(tǒng)就會先把這個文件中的內(nèi)容清空,然后再將數(shù)據(jù)寫入到該文件,也就是說若以>輸出到一個已存在的文件,則這個文件的內(nèi)容將會被覆蓋。那有沒有什么方法能不讓文件內(nèi)容被覆蓋呢?當然就,那就是>>,這也就是>與>>的區(qū)別。其用法與>大同小異,如下圖:
同樣的,使用這個命令,如果outfile2不存在于當前目錄中,則系統(tǒng)會自動創(chuàng)建這個文件,而如果這個文件已經(jīng)存在于當前目標下,則會把數(shù)據(jù)追加到該文件的末尾。所以在圖中看到了兩份重復的內(nèi)容。注:因為在默認情況下,>和>>分別表示1>和1>>,所以在命令中沒有用到1>和1>>,因為它們是等價的。4、標準錯誤輸出數(shù)據(jù)流重定向詳解標準錯誤輸出的使用和標準輸出的使用大同小異,在這里不再贅述,其使用如下:
由于當前目標下不存在文件TestStream.txt,所以直接使用cat,則會在屏幕上輸出錯誤提示,當然我們也可以用數(shù)據(jù)流重定向2>來把它輸出到文件errfile中,而不是輸出到屏幕上。因為>默認是代碼1,所以這里需要寫成2>,系統(tǒng)才知道這個是標準錯誤輸入重定向,那現(xiàn)在你應該更深刻地理解到代碼的作用了吧。而2>>也是追加的作用。通過上面的例子可以看到,我們可以利用數(shù)據(jù)流重定向把錯誤信息和正確信息分開。5、標準輸入數(shù)據(jù)流重寫向詳解詳解在標準輸入中,<代表將原來需要由鍵盤輸入的數(shù)據(jù)改由文件內(nèi)容來替代,<<則代表結束輸入。例如:利用cat來創(chuàng)建一個簡單的文件catfile1,如下圖所示:
如果當前目錄下不存在catfile1,則系統(tǒng)自動創(chuàng)建這個文件,并由鍵盤向這個文件寫入內(nèi)容;若文件已存在,則用輸入的內(nèi)容覆蓋該文件中的內(nèi)容。而標準輸入重定向可以用文件的內(nèi)容來替代鍵盤輸入,其操作如下圖所示:
可以看到,它把catfile1的內(nèi)容輸入到catfile2中,代替先前的鍵盤輸入。值得注意的是,在標準輸入重定向中<<并不表示追加,而是表示結束輸入的意思,即作為一個結束符。請看如下的例子:
之前的例子,都是使用ctrl+D來結束的,而這個例子,當你輸入“eof”時,自動退出了,當然這個結束符,你可以自己定義。這對寫程序是有一定的好處的。三、把正確信息與錯誤信息寫入同一個文件中的方法上面的例子,都是把正確和錯誤的信息分別存儲在不同的文件上的,那有沒有辦法把正確和錯誤的信息都儲存在同一個文件中呢?當然有!請看下面的例子:
注意:上面第三行的命令是錯誤的,雖然它看看起來非常直觀。它的錯誤并不是因為語法之類的錯誤,也不是因為它不能執(zhí)行,而是因為,有兩條數(shù)據(jù)流同時寫入一個文件,又沒有特殊的語法,此時會導致兩條數(shù)據(jù)流交叉地寫入文件,造成次序的錯亂,而不是屏幕上原來輸出的排序,使文件的信息不可讀。四、屏蔽所有信息的方法如果我有一定的目的,想把所有的錯誤信息或正確信息都屏蔽掉,可以怎么辦呢?這時可以利用數(shù)據(jù)流重定向,使它流向一個設備——/dev/null,它就像一個黑洞一樣,可以吃掉任何導向這個設備的信息。請看下面的例子:
無論是正確的信息還是錯誤的信息,它都能吃掉。五、何時使用數(shù)據(jù)流重定向既然我們知道了數(shù)據(jù)流的重定向,那么什么時候要使用數(shù)據(jù)流重定向呢?數(shù)據(jù)流重定向一般應用于:1、屏幕輸出的信息很重要,而且我們需要將它保存下來;2、后臺執(zhí)行中的程序,不希望它干擾屏幕正常的輸出結果;3、一些系統(tǒng)的例行命令的執(zhí)行結果,希望它能夠保存下來;4、一些執(zhí)行命令的可能已知出錯信息時,想以“2>/dev/null”將它屏蔽掉;5、錯誤信息和正確信息需要分別輸出;新聞熱點
疑難解答