2013-10-24 110 views
2

這兩個bash命令的區別是什麼: 1. printf「somthing wrong!%v」哎呀! > dumpz 2> 2. printf「somthing wrong!%v」哎呀! 2> & 1> dumpz 當我使用第一個腳本時,兩個流都保存在文件(dumpz)中。 當我使用第二個腳本時,只有標準輸出進入文件並且終端中顯示標準錯誤。流重定向順序和操作系統執行的細節

另一個問題是爲什麼在第一個腳本中,流的順序是不正確的。我的意思是第一行文件包含標準錯誤,第二行包含標準輸出。 我需要一些關於這個流的背景真正做了什麼的幫助。我的意思是什麼操作系統真正執行(指針,內存等)。

+2

對於[RTFM](http://en.wikipedia.org/wiki/Redirection_%28computing%29)來說並不是那麼糟糕,至少*偶爾一次*。 – devnull

回答

0

訂單在這些重定向中非常重要。

printf "somthing wrong!%v" Oops! > dumpz 2>&1 

將標準輸出重定向到文件dumpz,然後重定向錯誤輸出到標準輸出的地方被重定向。

但是這個命令:

printf "somthing wrong!%v" Oops! 2>&1 > dumpz 

將第一stderr重定向到哪裏標準輸出被重定向(TTY或終端),然後重定向標準輸出到dumpz文件。

+0

那麼不正確的順序是什麼,當我使用第一個命令文件包含第一行stderr和第二行stdout。 – muradin

+0

不要問你的問題。你在說這個命令:'2>&1> dumpz'? – anubhava

+0

我在說printf「somthing wrong!%v」哎呀! > dumpz 2>&1 – muradin

2

的重定向功能的應用程序發生在您指定的順序,所以在第一種情況下

printf "somthing wrong!%v" Oops! > dumpz 2>&1 

它首先重定向標準輸出到文件,然後重定向錯誤輸出到任何標準輸出指向,這是文件。

在第二種情況下

printf "somthing wrong!%v" Oops! 2>&1 > dumpz 

它首先重定向標準錯誤輸出到任何標準輸出被引導至(當前終端)。然後它將stdout重定向到該文件。

+0

那麼不正確的順序是什麼,當我使用第一個命令文件包含第一行stderr和第二行stdout。 – muradin

+0

[這裏是](http://www.catonmat.net/blog/bash-one-liners-explained-part-three/)非常好的解釋(與圖片)在執行兩個版本的過程中真正發生的事情例子。 –