bash的幾種特別的I O重定向語法

2021-10-03 02:57:33 字數 1696 閱讀 1207

下面這幾種重定向語法都很簡單,容易記住:

ls

> stdout.tx # 用標準輸出覆蓋stdout.txt

ls not-exist-file 2> stderr.txt # 用標準錯誤覆蓋stderr.txt

ls exist-file not-exist-file > stdout.txt 2> stderr.txt # 用標準輸出覆蓋stdout.txt,用標準錯誤覆蓋stderr.txt

cat< stdin.txt # 將stdin.txt的內容作為標準輸入

# 這行與cat stdin.txt的效果實際是一樣的

echo

"1 2 3"

|awk

''# 將echo的標準輸出重定向為awk的標準輸入

但是也有一些特別但又偶爾會用到的語法,不經常用容易忘記,在此記錄一下。

ls exist-file not-exist-file >stdout.txt 2>

&1

需要注意>stdout.txt2>&1的順序不能顛倒。

也有一種更簡單的語法:

ls exist-file not-exist-file &

>stdout.txt

ls exist-file not-exist-file 2>

&1 |

awk''

ls exist-file not-exist-file 2>

&1 >/dev/null |

awk''

需要注意2>&1>/dev/null順序不能顛倒。

這條聽著很拗口,主要指的是time/strace這些命令,如果你直接這樣寫:

time

ls> stdout.txt

那被重定向到stdout.txt的是ls的標準輸出而不是time的標準輸出。想要重定向time的輸出,你得這樣:

(time ls) 2> stdout.txt # time輸出是輸出到stderr的,所以此處用的是2>
cat

> stdout.txt <<

eofline 0

line 1

line 2

eof

上面的**會把「line 0」、「line 1」和「line 2」總共3行文字儲存到stdout.txt中(不包括最後的「eof」)。我第一次見到這種用法是在lfs的文件裡,其效果是cat會將後續的輸入文字作為標準輸入處理,直到遇到一行只包含「eof」的輸入為止。eof可以替換成其他文字。

使用一連串的echo "line x" >>實際也能達到相同的效果,但是不如這種方式清晰,命令和輸入能夠分離。

至於其他的重定向語法,還有很多,因為我沒有用過,就不在這裡列舉了,直接man bash然後轉到redirection一節可以得到乙個很長的列表與詳細解釋。

bash的的I O重定向及管道

程式 指令 資料 讀入資料 input 輸出資料 output 開啟的檔案都有乙個fd file descriptor 檔案描述符 標準輸入 keyborad,0 標準輸出 monitor,1 標準錯誤輸出 monitor,2 i o重定向 改變標準位置 輸出重定向 command new pos,...

linux中的IO重定向

資料匯流排 傳輸資料 控制中心 控制指令 暫存器 cup暫時儲存器 i o 輸入輸出裝置 i o重定向 管道 前乙個命令的輸出,作為後乙個命令的輸入 命令1 命令2 命令3 練習 統計 usr bin 目錄下的檔案個數 ls usr bin wc l 取出當前系統所有使用者的shell,要求 每種s...

Bash的輸入輸出重定向

此頁由linux wiki使用者 chenxing於2012年7月21日 星期六 20 55的最後更改。隱藏 7參考資料 檔案描述符 file descriptor 是程序對其所開啟檔案的索引,形式上是個非負整數。類 unix 系統中,常用的特殊檔案描述符如下 檔案描述符 名稱 常用縮寫 預設值 0...