在Linux Shell中,文件描述符(File Descriptor)是理解输入输出重定向的关键:
2>&1
表示将标准错误(stderr)重定向到标准输出(stdout)所在的位置。
2
:代表标准错误(stderr)>
:重定向符号&1
:表示"标准输出当前的位置"将错误和输出都重定向到文件
command > output.log 2>&1
执行顺序:
将错误和输出都丢弃
command > /dev/null 2>&1
错误写法:
command 2>&1 > output.log
这会导致: - stderr被重定向到stdout的原始位置(通常是终端) - 然后stdout被重定向到output.log
&>
等同于2>&1
&>
是bash的快捷方式,等同于> file 2>&1
,但并非所有shell都支持。
分离输出和错误
command > output.log 2> error.log
将错误追加到输出文件
command >> output.log 2>&1
使用tee命令同时输出到文件和终端
command 2>&1 | tee output.log
后台运行脚本并记录日志
nohup ./script.sh > script.log 2>&1 &
定时任务中捕获所有输出
* * * * * /path/to/command > /var/log/command.log 2>&1
调试脚本时查看详细输出
bash -x script.sh > debug.log 2>&1
&>
和>&
简写/dev/null
比重定向到实际文件更快2>&1
是Shell脚本中非常强大且常用的技巧,理解其工作原理可以帮助你:
- 更好地控制脚本的输出
- 更有效地进行调试
- 编写更健壮的自动化脚本
记住关键点:2>&1
将标准错误重定向到标准输出当前的位置,顺序在重定向中非常重要。