1. 程式人生 > >linix輸出重定向

linix輸出重定向

space pan 例子 scrip 系統 情況 hat 前端 鍵盤輸入

在 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輸出重定向