下面這幾種重定向語法都很簡單,容易記住:
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.txt
和2>&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...