日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux重定向文件不存在,shell 12 21 filename重定向的含义和区别

發布時間:2025/3/15 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux重定向文件不存在,shell 12 21 filename重定向的含义和区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

0 是一個文件描述符,表示標準輸入(stdin)

1 是一個文件描述符,表示標準輸出(stdout)

2 是一個文件描述符,表示標準錯誤(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, 還有其他的類型, 這兩種只是最常用和最基本的.

>是重定向符,就是把前面輸出的內容重定向到后面指定的位置,比如(例1):

echo "一些內容" > filename.txt

上面例子會把 "一些內容" 寫入到filename.txt 文件中。

>前是可以加數字來說明把什么內容重定向到文件中,默認是把標準輸出重定向到文件中,所以下面這個例子和上面那個是一樣的(例2):

echo "一些內容" 1> filename.txt

如果是錯誤信息就不會輸出到filename.txt(例3):

$ ls nodir 1> filename.txt

$ ls: nodir: No such file or directory

上面這個例子中nodir不存在,所以通過ls命令查詢時錯誤信息會輸出到 2(stderr),但我們指定的是把1重定向到filename.txt,所以上面命令執行完后,filename.txt中是沒有內容的。但是執行下面命令就會把錯誤信息寫入到filename.txt中(例4):

$ ls nodir 2> filename.txt

$ cat filename.txt

$ ls: nodir: No such file or directory

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

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

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

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

我們再看一個例子(列5):

$ ls nodir 1> filename.txt 2>&1

$ cat filename.txt

$ ls: nodir: No such file or directory

上面例子把 標準輸出 重定向到文件 filename.txt,然后把 標準錯誤 重定向到 標準輸出,所以最后的錯誤信息也通過標準輸出寫入到了文件中,比較例3,4,5,就能明白其作用。

下面是來自百度知道的內容,大家可以參考下:

問:Linux重定向中 >&2 怎么理解?

問題補充:echo "aaaaaaaaaaaaaaaa" >&2 怎么理解?

答:

>&2 即 1>&2 也就是把結果輸出到和標準錯誤一樣;之前如果有定義標準錯誤重定向到某log文件,那么標準輸出也重定向到這個log文件

如:ls 2>a1 >&2 (等同 ls >a1 2>&1)

把標準輸出和標準錯誤都重定向到a1,終端上看不到任何信息。

總結

以上是生活随笔為你收集整理的linux重定向文件不存在,shell 12 21 filename重定向的含义和区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。