在linux指令碼中,經常會看到有「command > file 2>&1」這種用法,一直不太理解,今天找時間查了相關資料,總結如下:
(1)1是標準輸出stdout,2是標準出錯stderr,>代表重定向;
(2)command > file,實際上是command 1>file,linux預設就是1,一般都省略了;
(3)2>&1,這個代表把stderr重定向到stdout,至於為什麼會有個&,我的理解是如果2>1的話,系統無法區分1是代表stdout還是檔名,所以要用&1來標識是stdout;
「command > file 2>&1」整句命令用strace看的話,分別順序呼叫了下面三個系統呼叫:
open(file) == 3;
dup2(3,1);
dup2(1,2);
此處dup2(3,1)將控制代碼1變成了3的duplicate。再dup2(1,2),將2衝變成1的duplicate。執行完之後2和1都會變成了3的duplicate,也就是2和1全部都重定向到開啟的file。
補充幾種用法
(1)還有一
種用法:「command >& file」,這裡的》&代表將所有的輸出都定向到file;
(2)n<&-
表示將n
號輸入關閉;
(3)n>&-表示將
n 號輸出關閉;
Linux中 2 1 的用法
在linux中,0表示標準輸入,即stdin 1表示標準輸出,即stdout 2表示標準錯誤,即stderr。表示重定向,表示取位址,那麼 1就是取到了標準輸出的位址,也就是 2 1表示的是將標準錯誤重定向到了標準輸出,也就是將執行指令碼中出錯的資訊重定向到了標準輸出。舉例 ls 2 1測試一下,由...
Linux中 2 1 的含義
平時寫shell指令碼時經常見到命令或者定時任務的後面跟著2 1的寫法,舉個例子大概如下面這樣 定時任務中 0 1 root bin sh opt log clear.sh dev null 2 1 普通shell指令碼中 yuminstall y mariadb galera server mar...
shell 中 2 1 的使用
一 相關知識 1 預設地,標準的輸入為鍵盤,但是也可以來自檔案或管道 pipe 2 預設地,標準的輸出為終端 terminal 但是也可以重定向到檔案,管道或後引號 backquotes 3 預設地,標準的錯誤輸出到終端,但是也可以重定向到檔案。4 標準的輸入,輸出和錯誤輸出分別表示為stdin,s...