I/O重定向
I/O 重定向
在UNIX系统中,获取输入和写入输出的流是预定义的。总是有三个默认文件打开:
stdin是输入数据源(键盘)stdout是输出数据源(屏幕)stderr是标准错误输出源(错误消息输出到屏幕)
这些以及任何其他打开的文件都可以被重定向。重定向简单地说就是捕获来自文件、命令、程序、脚本甚至脚本内代码块的输出,并将其作为输入发送到另一个文件、命令、程序或脚本。
基本重定向操作
## command_output >
# 将stdout重定向到文件
# 如果文件不存在则创建,否则覆盖它
$ ls -la > ls_result.txt
## : > filename
# '>' 将文件 'filename' 截断为零长度
# 如果文件不存在,创建零长度文件(与 'touch' 效果相同)
# ':' 用作虚拟占位符,不产生输出
$ : > empty_file.txt
## command_output >>
# 将stdout重定向到文件
# 如果文件不存在则创建,否则追加到它
$ ls -la >> ls_result.txt文件描述符重定向
每个打开的文件都会被分配一个文件描述符。stdin、stdout和stderr的文件描述符分别是0、1和2。对于打开的额外文件,保留描述符3到9。
高级重定向技巧
合并输出流
输入重定向
进程替换
防止意外覆盖
你可以通过在shell中设置noclobber选项来确保没有任何重定向会破坏现有文件:
实用示例
日志记录
调试
参考资料
How Unix Works: Become a Better Software Engineer - 深入了解UNIX工作原理
Advanced Bash-Scripting Guide: I/O Redirection - 高级Bash脚本编写指南
Bash Redirections Cheat Sheet - Bash重定向速查表
最后更新于