有時候,從檔案接受輸入或將結果送到檔案中去是很有用的。在這種情況下,在編寫命令時,增加檔名作為附加的或可選的引數是能做到的,一些命令也是這樣做的。但是,如果每條命令都要增加這些並不常用的功能,將會必要的增加命令的執行檔案的長度。為了避免這樣做。linux和shell一起提供了重新定向的功能。
(1)在必要時,允許將程式的標準輸入和輸出進行重新定向。如:
$ls -l /usr/tmp >dir
這一命令的前半部分產生/usr/tmp目錄的長清單。在正常情況下,在螢幕上顯示清單。在命令後面跟以大於號(>)和檔名時,清單將送到指定的檔案中,而不在螢幕上顯示清單。使用這種功能重新定向時,如果指定的檔案不存在,將建立這一檔案。若存在,原有內容被覆蓋。可以這樣驗證:
$cat dir
ls命令並不知道》符號的特殊功能。事實上,ls命令甚至不知道》符號的存在。因為shell將任何命令列引數送給ls命令以前已將》符號和後面的檔名稱移去。ls命令執行時像往常一樣將他的輸出送到標準輸出裝置。由shell在ls命令執行之前將他的輸出從螢幕重新定向到指定的檔案。其他重新定向功能也是類似的。
(2)有時候,希望使用輸出重新定向功能,將另一條命令輸出的結果追加到已有的檔案的後面。這時候,可以使用追加重新定向操作符(>>).如:
ls /usr/tmp >>dir
(3)程式的錯誤輸出也可以重新定向。程式的標準輸出和錯誤輸出通常作為兩件不同的事情對待,可以對它們分別進行重新定向。可以用下面的命令:
$ ls /usr/tmp 2>err.file
(4)使用符號2>(或追加符號2>>)表示對錯誤輸出裝置重新定向。
(5)為了將標準輸出和錯誤輸出同時送到統一檔案中,可以:
$ls /usr/tmp &>output.file
(6)標準輸入也可以獨自檔案,而不是從鍵盤輸入。:
$wc shell處理小於符號後面的部分,wc命令看不到檔名 /etc/passwd ,它像不包括檔名一樣,認為輸入來自鍵盤。
(7)另一種重新定向稱為here文件。它告訴shell當前命令的標準輸入來自命令列。here文件的重新定向操作符為(<<).
$wc <>ldllfldsfldjlfl;ld
>ldlfl;dflldl
在《操作符後面,任何字元都可以用做正文開始前的分隔符,本例使用delim作為分隔符。here文件的正文一直繼續到遇到另乙個分隔符為止。第二個分隔符應出現在新行的開頭。這時here文件的正文,不包括開始和結束的分隔符,將重新定向送給命令,作為他的標準輸入。
(8)組合新功能
例如,統計目錄中檔案數目:
$ls /usr/bin >/tmp/dir
$wc -w $rm /tmp/dir
kaishishiyongls命令列出/usr/bin目錄的內容,將結果重新定向送給/tmp/dir檔案。第二條命令對ls輸出檔案的字數進行統計,並顯示總數459.在結束時,將在/tmp 目錄下建立的臨時檔案刪去。這樣做不至於因為忘記而浪費此旁空間。
輸入輸出重定向
使用標準輸入流,標準輸出流和標準錯誤流,這些標準流都被預分配給鍵盤和顯示器。在需要的時候,可以使用重定向臨時改變這些預設分配。重定向是這樣一種過程,我們借助它指定乙個用於替代某個 標準檔案的檔案。輸入重定向 可以將標準輸入從鍵盤重定向到任何文字檔案。輸入重定向運算子為小於號 意味著該命令從此給 派的...
輸入輸出重定向
1.標準輸入的控制 語法 命令 檔案將檔案做為命令的輸入。例如 mail s mail test wesongzhou hotmail.com file1 將檔案file1 當做信件的內容,主 題名稱為mail test,送給收信人。2.標準輸出的控制 語法 命令 檔案將命令的執行結果送至指定的檔案...
輸入輸出重定向
想象一下,當我們寫了個程式,開始是在命令列下執行的程式,後來用mfc之類的改寫為窗體程式,原先用printf輸出的trace都不可見了,但是我們又需要 輸出到檔案分析 怎麼辦?1 開始寫的時候你定義乙個mytrace的巨集 2 你可以把printf換成fprintf 3 使用輸出重定向。第一種情況很...