參考文章: http://stackoverflow.com/questions/24793069/what-does-do-in-bash
標準輸入(stdin)的內建編號等於 0
標準輸出(stdout)的內建編號等於 1
標準錯誤(stderr)的內建編號等於 2
語法:
1. 內建編號 > 檔案名稱 : 若忽略內建編號,指的是將標準輸出轉向到檔案名稱, 相當於: 1> 檔案名稱
2. 內建編號 &> 檔案名稱 : 若忽略內建編號,指的是將標準輸出及標準錯誤都同時轉向到檔案名稱
3. 內建編號 >& 內建編號或檔案名稱 : 若忽略內建編號,指的是將標準輸出及標準錯誤都同時轉向
至於 2 與 3 有何不同呢? 舉個例子來看, 先產生一個文字檔 t:
echo This is a test file > t
列出 t 及 txxx 檔案的內容, 將標準輸出轉到 a, 並將標準錯誤轉到 b
cat t txxxxx 1>a 2>b
再來將 t 及 txxx 檔案的內容列印出來, 管線將標準輸出及標準錯誤同時轉到檔案 c
無論用 cat t txxxxx &> c 或 cat t txxxxx >& c 都得到相同結果,但
用 cat t txxxxx &> 1 卻是產生一個案名稱 1, 不會輸出到螢幕上.
而 cat t txxxxx >& 1 則是輸出到標處準輸出(螢幕)上, 不會另外產生一個檔案.
因此要使用 &> 或 >& , 就看要輸出是新檔案還是內建編號(0,1,2), 若要輸出到一般檔案就用 &> , 若要輸出到內建編號就要另外使用 >&了.
沒有留言:
張貼留言