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
。