bash的特性(二)IO重定向与管道

bash的I/O重定向及管道

一、概述

在shell中,最常使用的fd(file descriptor)有三个,标准输入,标准输出,错误输出。进程用文件描述符来管理打开的文件。

|----------------|-------|-------------------------------|
| 名称 | 文件描述符 | |
| 标准输入(stdin) | 0 | 键盘,也可以是其他文件或者命令的输出的内容可以作为标准输入 |
| 标准输出(stdout) | 1 | 默认输出到屏幕 |
| 错误输出(stderr) | 2 | 默认输出到屏幕 |
| 文件名称(filename) | 3+ | |

二、I/O重定向:改变标准位置

标准的输入设备默认指的是键盘,标准的输出设备默认指的是显示器。

      • 输入重定向:指定设备(通常是文件或命令的执行结果)来代替键盘作为新的输入设备;
      • 输出重定向:将原本要输出在屏幕上的结果放到指定的设备(通常是文件)

< 标准输入重定向

> 标准输出重定向

2> 标准错误输出重定向

&> 把所有输出(标准输出、标准错误输出)重定向

三、输出重定向:

COMMAND > NEW_POS,COMMAND >> NEW_POS

>:覆盖重定向,原内容清空

>>:追加重定向

注: set -C :禁止将内容重定向到已有文件中

强制覆盖:>|

set +C:取消set -C命令的作用

标准输出和错误输出流分别输出到不同的文件中:

COMMAND >> FILENAME1.out 2>>FILENAME2.out

合并标准输出流和错误输出流到同一个文件中:

COMMAND &>> FILENAME.out

效果同上:COMMAND >>FILENAME.out 2>>&1(注意顺序)

四、输入重定向

复制代码
命令 < 文件 将指定文件作为命令的输入设备

命令 << 分界符 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符)

命令 < 文件1 > 文件2 将文件1作为命令的输入设备,该命令的执行结果输出到文件2 中。

案例1:

tr命令:转换或删除字符

tr OPTION... SET1 SET2

tr abc ABC < /etc/fstab

案例2:cat是为了将标准输入的内容标准输出,这里将标准输出又重定向到1.log文件。

多行重定向输出可以使用上述方式,单行重定向可以使用:echo 'abc' > 1.log

五、管道

COMMAND1 | COMMAND2 | COMMAND3 | ...

将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN

STDERR错误重定向不能通过管道转发,可利用2>&1转化后实现

note:最后一个命令会在当前shell进程的子shell进程中执行。

六、tee命令

tee命令:重定向到多个目标

格式:命令1 | tee -a 文件名 | 命令2

把命令1的Stdout先保存在文件中,同时Stdout做为命令2的输入

例:

相关推荐
wdfk_prog19 分钟前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
做运维的阿瑞30 分钟前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
百万蹄蹄向前冲1 小时前
密码都对Node.js却连不上Linux数据库
linux·mysql
彧azz1 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
日常筹谋记1 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
susplus2 小时前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
Shadow(⊙o⊙)2 小时前
Linux进阶知识1.0
linux·运维·服务器
>Andre<2 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
用户0510122572963 小时前
Linux下有关QT显示环境变量设置
linux·嵌入式
闲云自留地3 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算