考点精讲
记忆技巧
「大于号写出去、小于号读进来、2 管错误、| 串联」。
三个文件描述符记「0 进、1 出、2 错」,2>&1 把「2 错」并到「1 出」。
> 覆盖、>> 追加——两个大于号「更长」所以是「追加」。
三个文件描述符记「0 进、1 出、2 错」,2>&1 把「2 错」并到「1 出」。
> 覆盖、>> 追加——两个大于号「更长」所以是「追加」。
常见误区
- 误区:混淆 >(覆盖)与 >>(追加)。正解:> 覆盖会清空原文件,>> 追加保留原内容。
- 误区:忘记用 2>&1 导致只重定向了正常输出。正解:要同时收集错误与正常输出,用 cmd > file 2>&1。
- 误区:写错 2>&1 的顺序。正解:2>&1 必须写在重定向目标之后(cmd > file 2>&1),写反会丢失错误输出。
真题思路
- 【示例】 需要把命令的「正常输出和错误输出」同时追加写入 /tmp/log,正确的写法是?
A. cmd > /tmp/log 2>&1 B. cmd >> /tmp/log 2>&1 C. cmd 2>&1 > /tmp/log D. cmd > /tmp/log 2> /dev/null
答案:B
解析:追加写入用 >>,2>&1 把 stderr 合并到 stdout,且顺序上 2>&1 要写在 >> 之后才正确;A 是覆盖写;C 顺序错误会丢失错误输出。
常见问题
Q:怎么同时把正常和错误输出写到同一文件
A:cmd > file 2>&1。
Q:怎么把错误输出单独丢弃
A:cmd 2> /dev/null。
Q:管道和重定向有什么区别
A:管道把前命令输出传给后命令输入,重定向把输出写到文件或从文件读入。
相关知识
教材出处:RH124 第4章 Shell 输入输出重定向与管道