bash:重定向输出混淆
bash: Confusion with redirecting output
当我执行这个命令(其中fail.cpp是一个充满编译器错误的简单程序)时,错误不会直接输出在屏幕上,而是在fail.out文件中输出:
g++ fail.cpp > fail.out 2>&1
从我对bash的介绍性理解来看,这是有道理的:>
将程序输出(stdout,又名1)重定向到fail.out,而2>&1
将stderr(又名2)重定向到stdout的这个新位置,即文件。(?)
但是更改命令的顺序会使事情发生不同:
g++ fail.cpp 2>&1 > fail.out
现在,错误消息直接进入屏幕,并且 fail.out 是一个空白文件。
这是为什么呢?这似乎与上面的想法相同:将此命令将产生的错误重定向到 stdout ( 2>&1
),然后将其重定向到 fail.out 文件。是我缺少的操作顺序吗?
2>&1
的意思是"将stderr重定向到stdout当前连接的位置",重定向按从左到右的顺序处理。所以第一个是:
- 将标准输出重定向到 fail.out 文件。
- 将 stderr 重定向到 stdout 的当前连接,即 fail.out 文件
第二个是:
- 将 stderr 重定向到 stdout 的当前连接,即终端。
- 将标准输出重定向到 fail.out 文件。
相关文章:
- 将标准输出重定向到ostream
- 在程序执行期间从标准输出重定向到自定义流
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- 将 Linux system() 调用命令的输出重定向到仅可变的
- 将 ffmpeg 控制台输出重定向到C++中的字符串或文件
- Win32 GUI C(++) 应用将标准输出和标准输出重定向到磁盘上的同一文件
- 将线程之间的标准输入/输出重定向
- GDB Cygwin 不会将输出重定向到文件
- 如何将 printf 流输出重定向到.csv文件
- 将PowerShell.exe的输入和输出重定向到C 中的管道
- Windows Batch - 如何在将标准输出重定向到文件时添加时间戳
- 将一个进程标准输出重定向到管道将产生不同的运行结果
- 如何将我的应用程序生成的标准 Mac OS X 日志输出重定向到文件
- 正在将控制台输出重定向到同一解决方案中的MFC屏幕输出
- 函数 system() 中的输出重定向似乎不起作用
- 使用 ofstream 将控制台输出重定向到文件C++末尾
- 将 printf C++控制台输出重定向到 C#
- 将打印到控制台的函数输出重定向到字符串
- 为外壳输出重定向创建文件
- 将调试输出重定向到空流而不是 std::cerr