2017年4月20日 星期四

bash 命令列的管線

參考文章: 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), 若要輸出到一般檔案就用 &> , 若要輸出到內建編號就要另外使用 >&了.



沒有留言: