當初在shell中, 看到">&1"和">&2"始終不明白什麼意思.通過在網上的搜索得以解惑.其實這是兩種輸出.html
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三個, 分別是:前端
0: Standard Input (STDIN)shell
1: Standard Output (STDOUT)htm
2: Standard Error Output (STDERR)blog
在標準狀況下, 這些FD分別跟以下設備關聯:ip
stdin(0): keyboard 鍵盤輸入,並返回在前端it
stdout(1): monitor 正確返回值 輸出到前端io
stderr(2): monitor 錯誤返回值 輸出到前端百度
舉例說明吧:file
當前目錄只有一個文件 a.txt.
[root@redhat box]# ls
a.txt
[root@redhat box]# ls a.txt b.txt
ls: b.txt: No such file or directory 因爲沒有b.txt這個文件, 因而返回錯誤值, 這就是所謂的2輸出
a.txt 而這個就是所謂的1輸出
再接着看:
[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
執行後,沒有任何返回值. 緣由是, 返回值都重定向到相應的文件中了,而再也不前端顯示
[root@redhat box]# cat file.out
a.txt
[root@redhat box]# cat file.err
ls: b.txt: No such file or directory
通常來講, "1>" 一般能夠省略成 ">".
便可以把如上命令寫成: ls a.txt b.txt >file.out 2>file.err
有了這些認識才能理解 "1>&2" 和 "2>&1".
1>&2 正確返回值傳遞給2輸出通道 &2表示2輸出通道
這裏的這個&能夠理解成 same as(和...同樣)。
就是將標準輸出的內容重定向的和標準錯誤流同樣,假如以前標準錯誤重定向到 err.log,那麼標準輸出也會重定向到這個文件。
若是此處錯寫成 1>2, 就表示把1輸出重定向到文件2中.
2>&1 錯誤返回值傳遞給1輸出通道, 一樣&1表示1輸出通道.
舉個例子.
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
[root@redhat box]# cat file.out
ls: b.txt: No such file or directory
a.txt
如今, 正確的輸出和錯誤的輸出都定向到了file.out這個文件中, 而不顯示在前端.
補充下, 輸出不僅1和2, 還有其餘的類型, 這兩種只是最經常使用和最基本的.
上文來自:http://chenyubo.iteye.com/blog/321616
下面是百度知道上的一個問題,做爲補充說明:http://zhidao.baidu.com/question/194703255.html
問:Linux重定向中 >&2 怎麼理解?
問題補充:echo "aaaaaaaaaaaaaaaa" >&2 怎麼理解?
答:
&2 即 1>&2 也就是把結果輸出到和標準錯誤同樣;以前若是有定義標準錯誤重定向到某log文件,那麼標準輸出也重定向到這個log文件 如:ls 2>a1 >&2 (等同 ls >a1 2>&1) 把標準輸出和標準錯誤都重定向到a1,終端上看不到任何信息。