UNIX 文字工具: stdout 和 stdin

現在我們要定義兩個術語:stdout 和 stdin。 所謂一個工具軟體支援資料流流出,真正的術語是, 這個工具軟體將資料輸出到【標準輸出設備】上,簡記做 stdout (standard output device)。 所謂一個工具軟體支援資料流流入,真正的術語是, 這個工具軟體將資料輸出到【標準輸入設備】上,簡記做 stdin (standard input device)。

利用這些術語,現在我們可以說明

根據這個規則,以下這個指令中

cat indian.txt > ten.txt
cat 把 indian.txt 的內容輸出到 stdout,但是因為用了導向裝置 >, 所以就把 indian.txt 的內容從 stdout 送進檔案 ten.txt 了。

根據同樣的規則,以下這個指令中

cat < indian.txt
cat 之後沒有給一個檔案名,因此它就自動從 stdin 取得資料。 而此時因為用了導向裝置 <,所以就把 indian.txt 的內容交給了 stdin。

將這個規則用到極至,實驗以下指令:

cat
這時候,既沒有導入也沒有導出,也沒有告訴 cat 一個檔案去讀。 所以 cat 就從 stdin 拿資料,而且輸出到 stdout。 所以游標停留在下一列的第一格。 這時候您可以打字,在螢幕上會看到 echo。 當您按下 Enter 之前,這些字都還在文字操作介面上, 只是 echo 在螢幕上給您看而已。 直到您按下 Enter,操作介面才將這一列文字送給 stdin。 而 cat 從 stdin 取得這一列文字之後,什麼也沒做就輸出給 stdout, 也就是印在螢幕上。 所以,每當您按一次 Enter 就會看到同樣的一列文字再印了一遍。 請務必做實驗。 玩夠了之後,當游標在第一格的時候按 Ctrl+D 結束 cat 程式。

所以,cat 這個無聊的濾器,就有了一個無用之用:

cat > aa
這時候 cat 就從 stdin 取得資料。 那麼,stdin 從鍵盤取得資料, 然後經由導向裝置,流入 aa 檔案。 因此,您就相當於從鍵盤上輸入文字到 aa 檔案裡面了。 您可以隨便輸入一些字,例如
and one
and two
and three four five
注意,這不是一個編輯器,您只能在按下 Enter 之前,利用 Backspace 鍵修改文字。 一旦按下 Enter,那一列文字就送進了 cat,也就是送進了 input.txt 檔案。 您就來不及修改了。 如果您做了實驗,請用 cat aa 看看輸入的內容,然後 rm aa

習題

  1. 如何利用 cat 在 indian.txt 的最後一列,添上一列
    this is the eleventh line

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Nov 17, 2000
Last Revised: Nov 17, 2000
© Copyright 2000 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw