linix輸出重定向
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三個, 分別是:
0 是一個文件描述符,表示標準輸入(stdin)
1 是一個文件描述符,表示標準輸出(stdout) (標準輸出信息會在緩沖區暫存,信息滿4K才輸出)
2 是一個文件描述符,表示標準錯誤(stderr)
在標準情況下, 這些FD分別跟如下設備關聯:
stdin(0): keyboard 鍵盤輸入,並返回在前端
stdout(1): monitor 正確返回值 輸出到前端
stderr(2): monitor 錯誤返回值 輸出到前端
[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
一般來說, "1>" 通常可以省略成 ">".
即可以把如上命令寫成: ls a.txt b.txt >file.out 2>file.err
& 是一個描述符,如果1或2前不加&,會被當成一個普通文件。
1>&2 意思是把標準輸出重定向到標準錯誤.
2>&1 意思是把標準錯誤輸出重定向到標準輸出。
1>&2 正確返回值傳遞給2輸出通道,&2表示2輸出通道
如果此處錯寫成 1>2, 就表示把1輸出重定向到文件2中.
2>&1 錯誤返回值傳遞給1輸出通道, 同樣&1表示1輸出通道.
舉個例子:
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
現在, 正確的輸出和錯誤的輸出都定向到了file.out這個文件中, 而不顯示在前端.
’>’與’>>’的區別為前都會清原來文件中的內容再寫入,後者會增加在文件的後面而不清原來的內容。
shell中可能經常能看到:>/dev/null 2>&1 //即忽略所有輸出信息。
/dev/null中(實際就上是系統的垃圾箱):
重定向的使用有如下規律:
1)標準輸入0、輸出1、錯誤2需要分別重定向,一個重定向只能改變它們中的一個。
2)標準輸入0和標準輸出1可以省略。(當其出現重定向符號左側時)
3)文件描述符在重定向符號左側時直接寫即可,在右側時前面加& 。
4)文件描述符與重定向符號之間不能有空格!
linix輸出重定向