shell 中 2 1 的使用

2022-08-23 02:21:13 字數 1154 閱讀 2046

一 相關知識

1)預設地,標準的輸入為鍵盤,但是也可以來自檔案或管道(pipe |)。

2)預設地,標準的輸出為終端(terminal),但是也可以重定向到檔案,管道或後引號(backquotes `)。

3) 預設地,標準的錯誤輸出到終端,但是也可以重定向到檔案。

4)標準的輸入,輸出和錯誤輸出分別表示為stdin,stdout,stderr,也可以用0,1,2來表示。

5)其實除了以上常用的3中檔案描述符,還有3~9也可以作為檔案描述符。3~9你可以認為是執行某個地方的檔案描述符,常被用來作為臨時的中間描述符。

二 例項

1)command 2>errfile : command的錯誤重定向到檔案errfile。

2)command 2>&1 | ...: command的錯誤重定向到標準輸出,錯誤和標準輸出都通過管道傳給下個命令。

3)var=`command 2>&1 : command的錯誤重定向到標準輸出,錯誤和標準輸出都賦值給var。

4)command 3>&2 2>&1 1>&3 | ...:實現標準輸出和錯誤輸出的交換。

5)var=`command 3>&2 2>&1 1>&3`:實現標準輸出和錯誤輸出的交換。

6)command 2>&1 1>&2 | ...     (wrong...) :這個不能實現標準輸出和錯誤輸出的交換。因為shell從左到右執行命令,當執行完2>&1後,錯誤輸出已經和標準輸出一樣的,再執行1>&2也沒有意義。

三 "2>&1 file"和 "> file 2>&1"區別

1)cat food 2>&1 >file :錯誤輸出到終端,標準輸出被重定向到檔案file。

2)cat food >file 2>&1 :標準輸出被重定向到檔案file,然後錯誤輸出也重定向到和標準輸出一樣,所以也錯誤輸出到檔案file。

四 注意

通常開啟的檔案在程序推出的時候自動的關閉,但是更好的辦法是當你使用完以後立即關閉。用m<&-來關閉輸入檔案描述符m,用m>&-來關閉輸出檔案描述符m。如果你需要關閉標準輸入用<&-; >&- 被用來關閉標準輸出。

五 同時輸出到終端和檔案

copy source dest | tee.exe copyerror.txt

六 參考

1)2)

3)感謝,thanks!

出處:

shell指令碼中 2 1

在指令碼開發中經常能看到 2 1 比如 2 root cd x php index.php task testone dev null 2 1對於 1 更準確的說應該是檔案描述符 1,而1標識標準輸出,stdout。對於2 表示標準錯誤,stderr。2 1 的意思就是將標準錯誤重定向到標準輸出。這...

shell中2 1之類的命令

放在 後面的 表示重定向的目標不是乙個檔案,而是乙個檔案描述符,內建的檔案描述符如下 1 stdout 2 stderr 0 stdin換言之 2 1 代表將stderr重定向到當前路徑下檔名為1的regular file中,而2 1代表將stderr重定向到檔案描述符為1的檔案 即 dev std...

shell中的重定向(2 1)

shell的輸出可以分為標準輸出和錯誤輸出,2 1中,2代表錯誤輸出,1代表標準輸出,符號代表後面跟的是代號而不是檔案。test.sh echo 我是標準輸出 ls tmp b.py 假設不存在 tmp b.py這個檔案 這裡會輸出 我是標準輸出 ls cannot access tmp b.py ...