shell 1>&2 2>&1 &>filename重定向的含義和區別

參考:http://www.javashuo.com/article/p-hptianir-ce.htmlhtml

0,1,2介紹

在 shell 程式中,最常使用的 FD (file descriptor) 大概有三個, 分別是:前端

0 是一個文件描述符,表示標準輸入(stdin)
1 是一個文件描述符,表示標準輸出(stdout)
2 是一個文件描述符,表示標準錯誤(stderr)shell

注:輸出不僅1和2, 還有其餘的類型, 這兩種只是最經常使用和最基本的.spa

在標準狀況下, 這些FD分別跟以下設備關聯: 日誌

stdin(0): keyboard 鍵盤輸入,並返回在前端 
stdout(1): monitor 正確返回值 輸出到前端 
stderr(2): monitor 錯誤返回值 輸出到前端code

舉例說明吧:htm

當前目錄只有一個文件 a.txt. blog

[root@yl ~]# ls
a.txt

因爲沒有b.txt這個文件, 因而返回錯誤值, 這就是所謂的2輸出ip

[root@yl ~]# ls a.txt b.txt
ls: cannot access b.txt: No such file or directory
a.txt

把正確日誌和錯誤日誌輸出不一樣文件

再接着看:get

# ls a.txt b.txt 1>file.out 2>file.err 

 [root@yl ~]# cat file.err
 ls: cannot access b.txt: No such file or directory

 [root@yl ~]# cat file.out
 a.txt

執行後,沒有任何返回值. 緣由是, 返回值都重定向到相應的文件中了,而再也不前端顯示 

爲了簡化,通常來講, "1>" 一般能夠省略成 ">",  即>默認表明1>

便可以把如上命令寫成: ls a.txt b.txt >file.out 2>file.err 這就實現了把正確日誌和錯誤日誌輸出不一樣文件

把正確日誌和錯誤日誌輸出同一文件

& 是一個描述符,若是1或2前不加&,會被當成一個普通文件。

[root@yl ~]# ls a.txt b.txt > file.out 2>&1      //錯誤返回值傳遞到1輸出通道,&1表示1輸出通道
[root@yl ~]# cat file.out                        //能夠看到1和2都輸出到同一文件
ls: cannot access b.txt: No such file or directory
a.txt

 

1>&2 意思是把標準輸出重定向到標準錯誤.

2>&1 意思是把標準錯誤輸出重定向到標準輸出.

&>filename 意思是把標準輸出和標準錯誤輸出都重定向到文件filename中.

相關文章
相關標籤/搜索