Subsections

5 輸入和輸出的控制

在您使用 Linux 的整個過程中,您很可能發現控制程式的輸入和輸入的效果是顯著的。這一節敘述控制輸入和輸入將能為您帶來些什麼。


1 標準輸入標準輸出、管道和重定向

每個進程和外部世界至少有三個連接。標準輸入 (standard input) 是進程的一個資料來源;標準輸出 (standard output) 是其輸出資料的一個地方;標準錯誤 (standard error) 設備是進程可以輸出錯誤訊息的一個地方(它們通常簡寫為 stdinstdoutstderr。)

單詞「源」和「地方」是故意含糊其詞的。這些標準輸出和輸出定位可以被用戶修改;它們可以是螢幕、鍵盤、一個檔案,甚至一個網路連接。您可以定向它加以使用。

當您在 shell 下運行一個程式時,通常鍵盤是標準輸入,標準輸出和錯誤顯示都是螢幕。然而您可以讓 shell 改變這些預設值。

舉個例子,echo 這個命令把它的輸入送到標準輸出,通常是螢幕。但是您可以把它送給一個檔案──通過使用輸出重定向操作符>。比如,把單詞 ``Hello'' 放到 myfile 檔案中,可以使用如下命令:

echo Hello > myfile

使用 cat 或您的純文字檔定頁閱讀器 (moreless) 來看 myfile 的檔案內容;請看圖 6.3,在 [*] 頁。

圖 6.3: 重定向輸出
\begin{figure}\par\par\begin{list}{}{\setlength{\rightmargin}{\leftmargin}\ragge...
...\par\$~\textbf{cat~myfile}
\par Hello
\par\$\end{ttfamily}\end{list}\end{figure}

您可以用輸入重定向操作符 < 來改變一個命令的標準輸入,例如,cat < myfile 將顯示 myfile 的內容。在實際應用中這是沒有什麼意義的;出於方便,cat 命令接受一個檔案名稱參數。所以您只要鍵入 cat myfile,效果是相同的。

此時 cat < myfile 的意思是 shell 打開檔案 myfile,然後把它的內容送到 cat 的標準輸入。cat myfile,即在沒有重定操作符時,意思是 cat 這個命令接受一個參數 (myfile),自己打開這個檔案,然後顯示這個檔案的內容。

存在這樣的兩種方法是有道理的。比如,您可以把一個命令的標準輸出連到另一個命令的標準輸入。這叫做管道,使用管道操作符[*]|.

也許您想倒著看 GNU 的通用公共許可證。為了做到這一點,您會使用 tac 命令,(它就是 cat,只不過是倒著的)。請試一下:

tac /usr/share/common-licenses/GPL

不幸地是,它閃得太快而很不見。所以您只能看到一些章節。解決方法是使用管道(pipeline):

tac /usr/share/common-licenses/GPL | less

這將取 tac 的標準輸出,倒轉了的 GPL,再送到 less 的標準輸入。

您可以把許多命令鏈接在一起。假如您有一個莫名的欲望想用 Q 替換所有的 G。為此您要使用命令 tr G Q,如:

tac /usr/share/common-licenses/GPL | tr G Q | less 

您也可以使用臨時檔案和重定向來獲得相同的效果,比如:

tac /usr/share/common-licenses/GPL > tmpfile

tr G Q < tmpfile > tmpfile2

less < tmpfile2

rm tmpfile tmpfile2 

很明顯使用管道方便多了。


John Goerzen / Ossama Othman / Debian 中文計劃