2017-06-24 16 views
0

我想了解linux shell腳本(bourne,bash)中標準和錯誤重定向的細節。linux shell標準輸出和錯誤輸出重定向如何結合使用時如何工作?

實施例1:

cat file1 > output.txt 

cat file1 1> output.txt 

此重定向的file1的內容到output.txt。按預期工作。


實施例2:

kat file1 2> output.txt 

吉命令不存在,因此被重定向錯誤到output.txt。按預期工作。


例3:

cat file1 2>&1 output.txt 

因爲貓是一個有效的命令和文件1存在,在這裏我希望與例1相反,我似乎得到這兩個文件的內容對屏幕相同的行爲。


例4:

kat file1 2>&1 output.txt 

因爲吉不存在,我希望相同的行爲,例如2.相反,我得到錯誤屏幕(「-bash:吉:命令未找到」)

在許多聯機手冊說明的那樣,例如: https://www.gnu.org/software/bash/manual/html_node/Redirections.html

+0

對於你的第三和第四個例子,你告訴我們你期望的是什麼,但不是發生什麼*發生*。請在您的問題中包含* actual *行爲,而不僅僅是您的期望。 –

+0

是真的。將添加。 –

回答

3

的問題是,僅2>&1告訴shell重定向文件描述符2(標準錯誤)到文件描述符1(標準輸出)。它實際上並不執行標準輸出的任何重定向。

對於您所要做的是明確的像

cat file1 > output.txt 2>&1 

請注意,你所要做的描述符重定向最後(標準輸出重定向後),否則將無法正常工作。

這全部在the Bash manual page(見the section about redirection)中進行了說明。

1
cat file1 2>&1 output.txt 

shell將設置重定向(stderr到stdout)。之後,您將有「離開」命令作爲外殼執行:

cat file1 output.txt 

這就是爲什麼你看到這兩個內容。

對於

kat file1 2>&1 output.txt 

它是相同的,因爲只有

kat file1 output.txt 

殼設置描述符要執行的命令後留下。這不能被發現=>來自shell的錯誤信息。

相關問題