當我執行此命令(其中fail.cpp是一個充滿編譯器錯誤的簡單程序)時,錯誤不會直接在屏幕上輸出,而是在fail.out文件中輸出:bash:混淆重定向輸出
g++ fail.cpp > fail.out 2>&1
從我的bash的介紹性的認識,這是有道理的:>
重定向程序輸出(stdout,又名1)fail.out,而2>&1
stderr重定向(又名2)爲標準輸出這個新的地方,這是文件。 (?)
但改變指令的順序,使事情發生不同:
g++ fail.cpp 2>&1 > fail.out
現在,錯誤信息直接在屏幕上,並fail.out是一個空白文件。
這是爲什麼?這似乎與上面的想法相同:將此命令將產生的錯誤重定向到標準輸出(2>&1
),並將其重定向到fail.out文件。這是我缺少的操作順序嗎?
[重定向](http://en.wikipedia.org/wiki/Redirection_%28computing%29) – devnull
在[bash手冊](http://www.gnu.org/software/)中的一個很好的解釋bash的/手動/ html_node/Redirections.html)。 –