shell中2 1之類的命令

2021-07-16 02:48:56 字數 786 閱讀 7773

放在》後面的&,表示重定向的目標不是乙個檔案,而是乙個檔案描述符,內建的檔案描述符如下

1 => stdout

2 => stderr

0 => stdin

換言之 2>1 代表將stderr重定向到當前路徑下檔名為1的regular file中,而2>&1代表將stderr重定向到檔案描述符為1的檔案(即/dev/stdout)中,這個檔案就是stdout在file system中的對映

而&>file是一種特殊的用法,也可以寫成》&file,二者的意思完全相同,都等價於

>file

2>&1

此處&>或者》&視作整體,分開沒有單獨的含義

第二個問題:

2>&1

# 我想問為什麼不能調下順序,比如這樣

find /etc -name .bashrc 2>&1 > list

這個是從左到右有順序的

第一種

*** > list

2>&1

先將要輸出到stdout的內容重定向到檔案,此時檔案list就是這個程式的stdout,再將stderr重定向到stdout,也就是檔案list

第二種

*** 2>&1 > list
先將要輸出到stderr的內容重定向到stdout,此時會產生乙個stdout的拷貝,作為程式的stderr,而程式原本要輸出到stdout的內容,依然是對接在stdout原身上的,因此第二步重定向stdout,對stdout的拷貝不產生任何影響

shell 中 2 1 的使用

一 相關知識 1 預設地,標準的輸入為鍵盤,但是也可以來自檔案或管道 pipe 2 預設地,標準的輸出為終端 terminal 但是也可以重定向到檔案,管道或後引號 backquotes 3 預設地,標準的錯誤輸出到終端,但是也可以重定向到檔案。4 標準的輸入,輸出和錯誤輸出分別表示為stdin,s...

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)

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