nic*_*ole 1 c++ bash scripting stdout stderr
当我执行此命令时(其中fail.cpp是一个充满编译器错误的简单程序),错误不会直接在屏幕上输出,而是在fail.out文件中输出:
g++ fail.cpp > fail.out 2>&1
Run Code Online (Sandbox Code Playgroud)
从我对bash的介绍性理解,这是有道理的:>将程序输出(stdout,又名1)2>&1重定向到fail.out,同时将stderr(又名2)重定向到stdout这个新文件的地方.(?)
但是改变命令的顺序会使事情发生不同:
g++ fail.cpp 2>&1 > fail.out
Run Code Online (Sandbox Code Playgroud)
现在,错误消息直接进入屏幕,fail.out是一个空白文件.
为什么是这样?它看起来与上面的想法相同:将此命令将产生的错误重定向到stdout(2>&1),然后将其重定向到fail.out文件.这是我失踪的操作顺序吗?
2>&1表示"将stderr重定向到stdout当前连接的位置",并且按从左到右的顺序处理重定向.所以第一个做:
第二个做:
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |