将输出重定向到文件或程序
标准输入、标准输出和标准错误
一个运行的程序(或进程)需要从某个位置读取输入并将输出写入某位置。从shell提示符运行的命令会从键盘读取其输入,并将输出发送到其终端窗口。
进程使用称为文件描述符的编号通道来获取输入并发送输出。所有进程在开始时至少需要有三个文件描述符。
标准输入(通道0)从键盘读取输入。
标准输出(通道1)将正常输出发送给终端。
标准错误(通道2)将错误信息发送给终端
通道(文件描述符)
编号 | 通道名称 |
---|---|
0 | stdin标准输入 |
1 | stdout标准输出 |
2 | stderr标准错误 |
将输出重定向到文件
重定向stdout可以阻止进程输出显示在终端上。但仅仅重定向stdout不会阻止stderr错误消息显示终端上。如果文件不存在,则会创建文件。如果文件存在,但是所需要的重定向没有附加到文件,则该文件的内容将被覆盖。
如果想丢弃消息,特殊文件 /dev/null 以静默方式丢弃重定向到其自身的通道输出,并且始终时空文件。
file| 重定向以覆盖文件
file | 重定向stdout以附加到文件
2>file | 重定向stderr以覆盖文件
2>/dev/null或者&>file |重定向stdout和stderr以覆盖同一个文件
file 2>&1或者&>>file重定向stdout和stderr以附加到同一文件
管道、重定向和tee命令
当重定向与管道组合时,shell会首先设置整个管道。在管道中,tee命令将其标准输入复制到标准输出中,并且还将标准输出重定向到指定为命令参数的文件。
使用tee命令的管道示例
tee命令克服了这个限制。在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件。