2017年1月25日 星期三

linux 資料流重導向 (redirecte) stderr stdout


ref.鳥哥
ref.http://dywang.csie.cyut.edu.tw/dywang/linuxProgram/node20.html


資料流重導向

標準輸入(stdin) :代碼為 0 ,使用 < 或 << ;
標準輸出(stdout):代碼為 1 ,使用 > 或 >> ;
標準錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ;

>> 為 append
>   為覆寫


1> :是將正確的資料輸出到指定的地方去
2> :是將錯誤的資料輸出到指定的地方去
若只下> 則預設等義>1


將資料輸出到不同的地方去呢?可以這麼寫:
find /home -name testing > list_right 2> list_error


將錯誤的資訊丟掉!
 find /home -name testing > list_right 2> /dev/null


 find /home -name testing > list 2> list <==錯誤寫法

find /home -name testing > list 2>&1 <==正確寫法
or
find /var -name run &>file
請特別留意這一點呢!同時寫入同一個檔案需要使用 2>&1 才對呦!
(這邊我的理解為 把 stderr導向stdout 的address   2>&1) 如此一來 stderr 就變為stdout了


方便的make linux
 alias mkl='make linux vmimg 2>&1 | grep -i "error:\|correct"'




連續命令

指令間以分號( ; )隔開:連續執行指令。
[root@linux ~]# sync; sync; shutdown -h now

指令間以 && 隔開:前面指令執行結果正確,就接著執行後續的指令,否則就略過。
[root@linux ~]# ls /tmp && touch /tmp/testingagin
 ## 目錄/tmp存在,所以/tmp/testingagin會被建立。

[root@linux ~]# ls /csie && touch /csie/test
## 目錄/csie不存在,所以touch /csie/test不會被執行。

指令間以 || 隔開:前一個指令有錯誤時,後面的指令才被執行。
[root@linux ~]# ls /tmp/csieing || touch /tmp/csieing