Bash 中的標準流

Fumbani Banda 2023年1月30日
  1. 標準流
  2. 標準輸入
  3. 使用鍵盤的標準輸入
  4. 使用檔案的標準輸入
  5. 來自重定向的標準輸入
  6. 來自管道的標準輸入
  7. 標準輸出
  8. 標準輸出顯示
  9. 標準輸出重定向到檔案
  10. 通過管道的標準輸出
  11. 標準錯誤
  12. 重定向到檔案的標準錯誤
  13. 將所有輸出重定向到檔案
Bash 中的標準流

本教程解釋了標準流和重定向檔案的輸出和輸入。

標準流

在 Linux 中,有三種標準流;標準輸入 (stdin)、標準輸出 (stdout) 和標準錯誤 (stderr)。每個流由一個檔案描述符表示。標準輸入用 0 表示,標準輸出用 1 表示,標準錯誤用 2 表示。

標準輸入

標準輸入是傳遞給程式的資料。通常是通過在鍵盤上打字。它也可以是通過管道傳輸或重定向到程式的資料。標準輸入使用 EOF(檔案結束)來指示輸入資料的結束。

使用鍵盤的標準輸入

我們將使用 cat 命令來演示使用來自關鍵字的輸入資料的標準輸入。cat 命令接受輸入並將其列印到螢幕上。

開啟 Linux 終端並輸入 cat,然後按Enter。你現在可以輸入任何輸入,一旦你按下回車,cat 命令會在終端上顯示輸入。cat 命令迴圈執行;要終止它接收進一步的輸入,請按 CTRL+D。它充當指示 EOF 的訊號。

stdin-cat

使用檔案的標準輸入

檔案還可以為程式提供輸入。我們將使用 cat 命令來演示檔案可以用作標準輸入。

cat 命令將檔名作為引數並在終端上顯示檔案的內容。在下圖中,cat 命令獲取檔案 output.txt,並在終端上顯示其內容。

stdin2-cat

來自重定向的標準輸入

標準輸入重定向使用標準輸入重定向運算子 <。輸入重定向使用符號 command < filename。這意味著命令的輸入來自指定檔名中的內容。

在下圖中,output.txt 的內容被傳遞給 cat 命令,該命令將它們列印在終端上。

stdin3-cat

來自管道的標準輸入

管道運算子用於將命令的輸出作為輸入傳遞給另一個命令。管道運算子是一個豎線,|

下面,head 命令獲取檔案 output.txt 的前 10 行,並將其作為標準輸入傳遞給 cat 命令。cat 命令將其顯示為終端的輸出。

stdin4-cat

標準輸出

標準輸出顯示程式生成的資料。如果沒有重定向或管道,則此資料將列印到終端。

標準輸出顯示

幾乎任何 Linux 命令都可以用來演示標準輸出。我們將使用 head 命令來演示這一點。head 命令將檔名作為引數並僅列印出檔案的前 10 行。

標準輸出頭

標準輸出重定向到檔案

標準輸出重定向使用標準輸出重定向運算子 >。輸出重定向使用符號 command > filename。這意味著命令的輸出應寫入指定的檔名。

符號 command >> filename 表示將命令的輸出附加到檔案而不是覆蓋現有檔案。 >> 稱為附加重定向運算子。

我們使用輸出重定向運算子將 ls 命令的輸出重定向到 output.txt 檔案。cat 命令用於顯示作為引數傳遞的檔案的內容。

標準輸出重定向

通過管道的標準輸出

管道運算子用於將命令的輸出傳遞給另一個命令。管道運算子是一個豎線,|

在這裡,ls 命令的輸出通過管道傳送到 head 命令。head 命令僅顯示(標準輸出)從管道輸入到終端的前 5 行。

標準輸出管道

標準錯誤

標準錯誤類似於標準輸出,不同之處在於它用於來自程式的錯誤訊息。

我們將使用 ls 命令來演示標準錯誤。ls 命令用於顯示資料夾內的內容。我們將不存在的資料夾名稱作為引數傳遞給 ls 命令,它將使用標準錯誤顯示錯誤訊息。

標準錯誤資料夾

重定向到檔案的標準錯誤

我們使用標準輸出重定向運算子將標準錯誤重定向到檔案。但是,我們必須通過將 2 新增到輸出重定向運算子 2> 作為檔案描述符來指定我們希望重定向標準錯誤。

現在讓我們將 ls 命令的標準錯誤重定向到一個檔案。2> 指定只有 ls 命令生成的錯誤應該重定向到 errors_file.txt 檔案。

標準錯誤檔案

讓我們使用 cat 命令來顯示 errors_file.txt 的內容。下面,我們看到該檔案包含 ls 命令的錯誤訊息。

stderr-cat

將所有輸出重定向到檔案

要將標準輸出和標準錯誤重定向到同一個檔案,請使用以下符號。

command > file 2>&1。它將命令的兩個流重定向到指定的檔案。

在下圖中,ls 命令的標準輸出和標準錯誤都被重定向到同一個檔案 output.txt

output-both

作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub