標準輸入/輸出/錯誤 及I/O轉向 與 管線
 
   
一個程式在執行時常常需要從輸入檔讀進資料並將運算結果儲存在輸出檔中。 在Unix出現之前,傳統作業系統中, 一個程式的輸出檔與輸入檔的檔名都是寫死在程式中的, 非常難以改變。 Unix做了一個革命性的改進,除了提供傳統的輸出輸入方式之外,還額外提供 了一個方法讓使用者可以任意改變輸入輸出的標的。 Unix 定義了標準輸入檔及標準輸出檔,只要一個程式 從標準輸入檔讀進資料並將運算結果儲存在標準輸出檔中,使用者就能運用 I/O 轉向將輸入或輸出導向任意的檔案。 標準輸入檔的預設值是鍵盤,而 標準輸出檔的預設值是螢幕。 例如: 'ls'這個指令的輸出是螢幕,將一個目錄內的全部或部分檔案名稱列在螢幕上。 但如果要將'ls'這個指令的執行結果放入一個檔案,便可以用下法:
    ls *.jpg > myfile
  #=============================================
  #將所有jpg檔列出,寫入到 "myfile" 這個檔案。
在上例中,'>' 是輸出轉向,系統會開啟一個新檔,"myfile", 若該檔案原就存在,則內容會先被清除。 如此方便高度彈性的特性,是Unix 之所以如此好用的原因之一。
對比於我們常用的視窗系統,要將一個資料夾內的檔案名稱存入一個檔案中, 沒有方便的方法。
 
   
Unix 系統主動為每一個程序(Process)預設開啟三個檔案: 標準輸入(檔案代碼為 0),預設連結到鍵盤;標準輸出(檔案代碼為 1),預設連結到螢幕;標準錯誤(檔案代碼為 2), 通常也是預設連結到螢幕。

名稱 簡稱 File Descriptor
標準輸出
STDIN
   0
標準輸入
STDOUT
   1
標準錯誤輸出
STDERR
   2
 
   
使用者可以改變預設的連結到其他檔案。
 
 
更改標準輸入(STDIN) "<"
 
   
在指令後方加"< myfile" ,
即可從"myfile"這個檔案輸入資料。
 
 
更改標準輸入(STDIN) "<<"
 
   
在指令後方加"<<" ,
即可將之後的字串當作標準輸入讀取資料。
請參考下節的說明。
 
 
更改標準輸出(STDOUT) ">"
 
   
在指令後方加"> myfile" ,
即可將螢幕輸出的資 料導向到"myfile"這個檔案上。
 
 
更改標準輸出(STDOUT) ">>"
 
   
在指令後方加">> myfile", 功能與”>”相似,
只不過這會將資料加在檔案 "myfile" 的後面。
# 以下為簡單的輸出轉向的例子,系統 Prompt 字元設為%
#-------------------------------------------------------- 
%echo test > testfile
%cat testfile
test
%echo TEST > testfile
%cat testfile
TEST
%echo test >> testfile
%cat testfile
TEST
test
% 

#--------------------------------------------------------

可以看到第二個echo 將第一個 echo 的執行結果覆蓋掉了, 而第三個echo 卻保留了第二個 echo 的執行結果。
 
   
標準錯誤輸出(STDERR, standard error), 用來顯示錯誤訊息,如果標準輸出(STDOUT)已經被轉向到一個檔案去, 我們還是可以從螢幕上看到錯誤訊息。 在 Bourne Shell (sh) 及 Korn Shell (ksh) 中, 可以使用"2>"符號把它轉向到另一個檔案, 當然也可以將 STDOUT 及 STDERR合併轉向到同一檔案去。
 
 
合併標準輸出(STDOUT)與標準錯誤輸出(STDERR)
 
   
當撰寫一個電腦程式時,在除錯的過程中, 經常要將錯誤資訊儲存起來慢慢分析,如前所述可用 2> 將標準錯誤輸出(STDERR)轉向到一個檔案,如果 要合併標準輸出(STDOUT)與標準錯誤輸出(STDERR)並且存到 一個檔案時,就需用到
command 2>&1 > myfile
這樣的方式。 其中 >& 這對符號其實就是 > 的特殊表示法, 其後面不是接著一般檔名,而是檔案編號,因而要用這對特殊符號。
Web Page Copyright: 亞洲大學資訊電機學院 連耀南 yaonanlien@asia.edu.tw  redirect.htm,  Wed Jan 24 23:42:43 CST 2024