Bash 中的標準流
- 標準流
- 標準輸入
- 使用鍵盤的標準輸入
- 使用檔案的標準輸入
- 來自重定向的標準輸入
- 來自管道的標準輸入
- 標準輸出
- 標準輸出顯示
- 標準輸出重定向到檔案
- 通過管道的標準輸出
- 標準錯誤
- 重定向到檔案的標準錯誤
- 將所有輸出重定向到檔案
本教程解釋了標準流和重定向檔案的輸出和輸入。
標準流
在 Linux 中,有三種標準流;標準輸入 (stdin)、標準輸出 (stdout) 和標準錯誤 (stderr)。每個流由一個檔案描述符表示。標準輸入用 0 表示,標準輸出用 1 表示,標準錯誤用 2 表示。
標準輸入
標準輸入是傳遞給程式的資料。通常是通過在鍵盤上打字。它也可以是通過管道傳輸或重定向到程式的資料。標準輸入使用 EOF(檔案結束)來指示輸入資料的結束。
使用鍵盤的標準輸入
我們將使用 cat 命令來演示使用來自關鍵字的輸入資料的標準輸入。cat 命令接受輸入並將其列印到螢幕上。
開啟 Linux 終端並輸入 cat,然後按Enter。你現在可以輸入任何輸入,一旦你按下回車,cat 命令會在終端上顯示輸入。cat 命令迴圈執行;要終止它接收進一步的輸入,請按 CTRL+D。它充當指示 EOF 的訊號。

使用檔案的標準輸入
檔案還可以為程式提供輸入。我們將使用 cat 命令來演示檔案可以用作標準輸入。
cat 命令將檔名作為引數並在終端上顯示檔案的內容。在下圖中,cat 命令獲取檔案 output.txt,並在終端上顯示其內容。

來自重定向的標準輸入
標準輸入重定向使用標準輸入重定向運算子 <。輸入重定向使用符號 command < filename。這意味著命令的輸入來自指定檔名中的內容。
在下圖中,output.txt 的內容被傳遞給 cat 命令,該命令將它們列印在終端上。

來自管道的標準輸入
管道運算子用於將命令的輸出作為輸入傳遞給另一個命令。管道運算子是一個豎線,|。
下面,head 命令獲取檔案 output.txt 的前 10 行,並將其作為標準輸入傳遞給 cat 命令。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 命令的錯誤訊息。

將所有輸出重定向到檔案
要將標準輸出和標準錯誤重定向到同一個檔案,請使用以下符號。
command > file 2>&1。它將命令的兩個流重定向到指定的檔案。
在下圖中,ls 命令的標準輸出和標準錯誤都被重定向到同一個檔案 output.txt。

