shell指令碼中 2 1

2021-10-12 06:10:41 字數 843 閱讀 4784

在指令碼開發中經常能看到 2 &>1 .

比如

*/2 * * * * root cd /***x; php index.php task testone >/dev/null 2>&1
對於& 1 更準確的說應該是檔案描述符 1,而1標識標準輸出,stdout。

對於2 ,表示標準錯誤,stderr。

2>&1 的意思就是將標準錯誤重定向到標準輸出。這裡標準輸出已經重定向到了 /dev/null。那麼標準錯誤也會輸出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等價於乙個只寫檔案. 所有寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什麼也讀不到.

偶爾也可以把 & 在命令的最後加上,表示讓程式後台執行。

為何2>&1要寫在後面?

index.php task testone >/dev/null 2>&1
我們可以理解為,左邊是標準輸出,好,現在標準輸出直接輸入到 /dev/null 中,而2>&1是將標準錯誤重定向到標準輸出,所以當程式產生錯誤的時候,相當於錯誤流向左邊,而左邊依舊是輸入到/dev/null中。

可以理解為,如果寫在中間,那會把隔斷標準輸出指定輸出的檔案

你可以用

ls 2>1測試一下,不會報沒有2檔案的錯誤,但會輸出乙個空的檔案1;

ls *** 2>1測試,沒有***這個檔案的錯誤輸出到了1中;

ls *** 2>&1測試,不會生成1這個檔案了,不過錯誤跑到標準輸出了;

ls *** >out.txt 2>&1, 實際上可換成 ls *** 1>out.txt 2>&1;重定向符號》預設是1,錯誤和輸出都傳到out.txt了。

shell指令碼中》 dev null 和 2 1

shell中可能經常能看到 dev null 2 1 命令的結果可以通過 的形式來定義輸出 dev null 代表空裝置檔案 代表重定向到 例如 echo 123 home 123.txt 1 表示stdout標準輸出,系統預設值是1,所以 dev null 等同於 1 dev null 2 表示s...

shell指令碼中 dev null 2 1詳解

1,可以將 dev null看作 黑洞 它非常等價於乙個只寫檔案.所有寫入它的內容都會永遠丟失.而嘗試從它那兒讀取內容則什麼也讀不到.然而,dev null對命令列和指令碼都非常的有用.首先shell中0代表標準輸入 1代表標準輸出 2代表標準錯誤輸出 用處 禁止標準輸出.1 cat filenam...

理解 shell 指令碼中的常見用法 2 1

在我們接觸的 shell 指令碼中,對 2 1 一定不陌生,比如 ls foo dev null 2 1。本文就來解釋下 2 1 究竟做了什麼,並且是如何起作用的。重定向 是計算機用來把命令的輸出從乙個地方,輸出到另乙個地方。舉個例子,預設情況下,我們使用 cat 指令可以把乙個檔案的內容列印到終端...