Linux命令行中stream-redirection目录下program的stdout输出是什么?
嘿,我来帮你把这个Linux命令行重定向的问题理清楚~
如何查看
program的stdout输出,以及处理stderr相关操作 首先先帮你明确两个核心概念,这能帮你理解后续操作:
stdout(文件描述符1):程序的标准输出,默认会显示在你的终端屏幕上stderr(文件描述符2):程序的标准错误输出,默认同样会显示在终端屏幕上
查看你的program的stdout输出
你已经做的操作是完全正确的:
# 先进入目标目录 cd stream-redirection # 运行program,将stdout重定向到名为stdout的文件 ./program 1> stdout
这一步已经把程序的stdout内容完整写入到了stdout文件中,你用cat stdout就能看到所有的标准输出内容。
你可能的困惑点应该是:执行命令后屏幕上还有内容?那是因为stderr没有被重定向,屏幕上剩下的内容是程序输出到stderr的部分,不会被写入到stdout文件里。
处理stderr的常用操作
根据你的需求,这里整理了几种常见的stderr处理方式,你可以按需选择:
1. 分别保存stdout和stderr到不同文件
把正常输出存到stdout.log,错误输出存到stderr.log:
./program 1> stdout.log 2> stderr.log
之后用cat stdout.log查看标准输出,cat stderr.log查看错误输出即可。
2. 将stderr合并到stdout,一起保存到同一个文件
如果想把所有输出(正常+错误)都放到同一个文件里,有两种写法:
# 兼容所有bash版本的写法 ./program > combined.log 2>&1 # bash 4.0+支持的简洁写法 ./program &> combined.log
3. 只看stdout,丢弃stderr
如果只想在屏幕上看正常输出,把错误输出直接扔掉:
./program 2>/dev/null
/dev/null是Linux里的“数据黑洞”,任何写入它的内容都会被直接丢弃。
4. 只看stderr,丢弃stdout
反过来,如果你只想查看错误输出,屏蔽正常输出:
./program 1>/dev/null
快速验证小技巧
你可以先直接运行./program,看看屏幕上的混合输出;再对比cat stdout的内容,就能直观区分出哪些是stdout的输出,哪些是stderr的输出啦。
内容的提问来源于stack exchange,提问作者CyberNewbie
相关产品推荐
相关产品推荐

