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

文件描述符重定向

每个打开的文件都会被分配一个文件描述符stdinstdoutstderr的文件描述符分别是012。对于打开的额外文件,保留描述符39

高级重定向技巧

合并输出流

输入重定向

进程替换

防止意外覆盖

你可以通过在shell中设置noclobber选项来确保没有任何重定向会破坏现有文件:

实用示例

日志记录

调试

参考资料

最后更新于