2021-05-12 14:32:11
Shell 基礎 - 輸入輸出重定向
一、檔案描述符
檔案描述符是一個非負的整數,Linux 中每個執行中的程式(進程),都有一些與之關聯的檔案描述符,你可以使用檔案描述符來存取開啟的檔案或裝置。在標準 I/O 庫中,與檔案描述符對應的是流。當一個程式開始執行時,它一般會有 3 個已經開啟的檔案描述符,分別對應三個檔案流:
檔案描述符 | 流 |
0 | 標準輸入流(stdin) |
1 | 標準輸出流(stdout) |
2 | 標準錯誤流(stderr) |
顯然,還有其他的檔案描述符,這裡暫時不做討論。一般情況下,一個程式開啟時,會去讀取標准輸入,將結果寫入標準輸出,將錯誤結果寫入標準錯誤輸出(預設的標準輸入、標準輸出和標準錯誤輸出都是終端):
如圖上圖所示,cat 命令後面沒有接引數,則預設讀取標准輸入,將結果輸出到標準輸出。很多情況下,我們不希望從標準輸入獲取程式輸入,也不想將程式結果寫入標準輸出,將錯誤結果寫入到標準錯誤輸出,這時就可以使用重定向來完成相應的需求。
二、輸出重定向
輸出重定向使用 > 或 >> 操作符。其中 > 操作符表示覆蓋輸出;>> 操作符表示將輸出內容附加到檔案尾。
2.1 將標準輸出重定向到檔案
command > file
command >> file
使用 command > file 命令,可以將 command 的標準輸出修改為 file,若當前目錄下沒有 file 檔案,則會建立該檔案;若已經存在 file 檔案,則會覆蓋 file 檔案,file 檔案原本的資料將會丟失。
使用 command >> file 命令,可以將 command 的標準輸出修改為 file,若當目錄下沒有 file 檔案,則建立該檔案;若已經存在 file 檔案,則將程式結果附加到檔案尾。
同樣的,以 cat 命令為例:
cat > newfile
My name is tongye
How are you
^D # Ctrl + D,結束輸入
cat >> newfile
I am fine
^D
結果如下:
2.2 將標準錯誤輸出重定向到檔案
command 2> file
command 2>> file
使用 2> 或 2>> 來對標準錯誤輸出進行重定向。
2.3 將標準輸出和標準錯誤輸出重定向到不同檔案
command > file1 2> file2
該命令將標準輸出和標準錯誤輸出分別重定向到不同檔案。
2.4 將標準輸出和標準錯誤輸出重定向到同一檔案
command > file 2>&1
該命令將標準輸出和標準錯誤輸出重定向到同一個檔案。
三、輸入重定向
使用 < 操作符進行輸入重定向:
command < file
該命令可以將 command 的標準輸入改為從檔案 file 輸入。
相關文章