Unix/重定向快速入門
當你執行一個有輸出的命令時,我們說它預設會寫入標準輸出,也就是螢幕。如果一個命令需要輸入,我們說它從標準輸入讀取,也就是鍵盤。我們已經多次見過的ls命令會生成一個檔案和目錄的列表作為其輸出,並將其列印到螢幕上。我們將使用一個新的命令 - cat - 來研究如何將流'重定向'到標準輸入或輸出。
你可以使用cat命令來接收輸入並將其寫入標準輸出。通常你像這樣使用它
%cat myfile.txt
它會將myfile.txt的內容放到螢幕上,然後返回到提示符。它滾動內容非常快!
當你以描述的方式使用cat時,輸入來自檔案,它寫入標準輸出(你猜對了:螢幕)。但我們可以指示cat從檔案以外的地方獲取輸入,並將輸出傳送到螢幕以外的地方。
你可以使用cat來捕獲在鍵盤上鍵入的內容,並將其傳送到某個輸出。我們可以透過在不指定檔名的情況下鍵入cat來嘗試它,就像這樣
% cat
你現在可以在鍵盤上輸入,當你輸入完你想要的字元後,按下回車鍵換行。當你完全輸入完後,鍵入 Ctrl-d(簡寫為 ^D)來結束該過程。如果你像這樣執行cat而不命名要讀取的檔案,它會讀取標準輸入(鍵盤),並在收到'檔案結束'(^D)時,將其複製到標準輸出(螢幕)。
正如我所說,你可以重定向命令的輸入和輸出。
你使用>符號將輸出重定向到檔案。例如,要建立一個名為colours的檔案,其中包含顏色名稱列表,鍵入
% cat > colours
然後輸入一些顏色的名稱。每個名稱後按[回車]鍵,最後以^D結束。
pink yellow purple ^D
(這意味著按[Ctrl]和[d]來停止)。
cat命令讀取標準輸入(鍵盤),>將輸出(通常會發送到螢幕)重定向到一個名為 colours 的檔案
要讀取檔案的內容,鍵入
% cat colours
(這並不是建立文字檔案的最佳方法 - 通常我建議使用像vi或emacs或pico這樣的編輯器,但我們正在學習重定向,而不是文字編輯。)
如果你使用>>來重定向,那麼標準輸出將被重定向到檔案的末尾,並追加到現有內容中。因此,要向 colours 檔案新增更多專案,鍵入
% cat >> colours
然後輸入一些更多顏色的名稱
red ^D
(Control D 來停止)
這將鍵盤輸入重定向到colours檔案的末尾。
要讀取檔案的內容,鍵入
% cat colours
現在我們將建立一個名為 colours2 的檔案
% cat > colours2 green blue ^D
(Control D 來停止)
你現在有兩個檔案。一個列出了四種顏色,另一個列出了兩種顏色。
我們現在將使用cat命令將 colours 和 colours2 合併(concatenate)到一個名為 allcolours 的新檔案中。這實際上是該命令的最初目的。你像這樣操作
% cat colours colours2 > allcolours
這樣做的原理是依次讀取 colours 和 colours2 的內容,並將結果組合到 allcolours 檔案中。要讀取新檔案的內容,鍵入
% cat allcolours
我們使用<符號來重定向命令的輸入。
例如,sort命令按字母順序或數字順序對列表進行排序。鍵入
% sort
然後輸入一些動物的名稱。每個名稱後按[回車]鍵。
dog cat bird ape ^D
(控制 d 來停止)
輸出將是
ape bird cat dog
使用<,你可以將輸入重定向到來自檔案而不是鍵盤。例如,要對顏色列表進行排序,鍵入
% sort < allcolours
排序後的列表將輸出到螢幕上。
要將排序後的列表的輸出重定向到檔案,鍵入,
% sort < allcolours > sortedcolours
使用cat來顯示 sortedcolours 檔案的內容。
除了將命令的輸出重定向到檔案外,我們還可以使用管道將它傳遞給另一個程序。例如
% sort < allcolours | wc -l
在這種情況下,sort命令的輸出被傳遞到wc命令並進行處理,然後再顯示。
