1. 程式人生 > >標準輸入、輸出和錯誤輸出

標準輸入、輸出和錯誤輸出

 當我們在s h e l l中執行命令的時候,每個程序都和三個開啟的檔案相聯絡,並使用檔案描述符來引用這些檔案。由於檔案描述符不容易記憶, s h e l l同時也給出了相應的檔名。 
下面就是這些檔案描述符及它們通常所對應的檔名:

檔案檔案描述符 
輸入檔案—標準輸入stdin 0:它是命令的輸入,預設是鍵盤,也可以是檔案或其他命令的輸出。 
輸出檔案—標準輸出stdout 1:它是命令的輸出,預設是螢幕,也可以是檔案。 
錯誤輸出檔案—標準錯誤stderr 2:這是命令錯誤的輸出,預設是螢幕,同樣也可以是檔案。

如果沒有特別指定檔案說明符,命令將使用預設的檔案說明符(你的螢幕,更確切地說是你的終端)。

系統中實際上有1 2個檔案描述符,但是正如我們在上表中所看到的, 0、1、2是標準輸入、輸出和錯誤。可以任意使用檔案描述符3到9。

在執行命令時,可以指定命令的標準輸入、輸出和錯誤,要實現這一點就需要使用檔案重定向。下面列出了最常用的重定向組合,並給出了相應的檔案描述符。 
在對標準錯誤進行重定向時,必須要使用檔案描述符,但是對於標準輸入和輸出來說,這不是必需的。

常用檔案重定向命令 
command > filename 把標準輸出重定向到一個新檔案中 
command >> filename 把標準輸出重定向到一個檔案中(追加) 
command 1 > fielname 把標準輸出重定向到一個檔案中 
command > filename 2>&1 把標準輸出和標準錯誤一起重定向到一個檔案中 
command 2> filename 把標準錯誤重定向到一個檔案中 
command 2>> filename 把標準輸出重定向到一個檔案中(追加) 
command >> filename 2>&1 把標準輸出和標準錯誤一起重定向到一個檔案中(追加) 
command < filename >filename2 把c o m m a n d命令以f i l e n a m e檔案作為標準輸入,以f i l e n a m e 2檔案作為標準輸出 
command < filename 把c o m m a n d命令以f i l e n a m e檔案作為標準輸入 
command << delimiter 把從標準輸入中讀入,直至遇到d e l i m i t e r分界符 
command <&m 把檔案描述符m作為標準輸入 
command >&m 把標準輸出重定向到檔案描述符m中 
command <&- 關閉標準輸入