shell中的重定向 1 2 2 1 2

2021-07-07 04:36:58 字數 1487 閱讀 1846

當初在shell中, 看到」>&1」和」>&2」始終不明白什麼意思.經過在網上的搜尋得以解惑.其實這是兩種輸出.

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

0: standard input (stdin) 

1: standard output (stdout)

2: standard error output (stderr)

在標準情況下, 這些fd分別跟如下裝置關聯:

stdin(0): keyboard 鍵盤輸入,並返回在前端

stdout(1): monitor 正確返回值 輸出到前端

stderr(2): monitor 錯誤返回值 輸出到前端

舉例說明吧:

當前目錄只有乙個檔案 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輸出通道

如果此處錯寫成 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, 還有其他的型別, 這兩種只是最常用和最基本的.

Shell中的重定向

幾乎所有的linux命令都是以鍵盤作為輸入,以顯示屏作為輸出。但在linux中,通過重定向你也可以以檔案作為輸入輸出。有三個重定向符號 作用 將命令執行結果輸出到檔案,如果檔案不存在則新建乙個,如果檔案存在則重寫檔案。舉例 cal mycal cat mycal 作用 將命令執行結果輸出到檔案,如果...

shell中輸入重定向,輸出重定向,管道

什麼是檔案描述符 1 程序中開啟乙個檔案就會有乙個檔案描述符 2 檔案描述符是乙個非負整數 3 系統為每乙個程序維護乙個檔案描述符表 程序級檔案描述符 4 同乙個程序裡面不同檔案描述符可以對應同乙個檔案 乙個檔案被開啟多次 5 不同程序的檔案描述符可以相同 不影響 可以指向同乙個檔案,也可以指向不同...

shell中的重定向(2 1)

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