打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Shell管道线和过滤器

1):基本概念
原始数据从一端进入,然后接着一个程序对数据进行处理,直到另一端,数据以结果形式出现。shell 允许创建一序列命令,命令(也可以是脚本)用’|’ 分隔开来,代表一个程序的标准输出(不包含有标准错误)可以 自动地发送给 下一个程序的标准输入。
阅读方式为: 从左到右的方式 读取。
两个程序之间的连接’|’ 就是 “管道” , “命令序列”称为 管道线

编写习惯:
当编写 管道线的时候, ‘|’ 元字符的两边其实没必要加上空格,
但是, 应当加上空格。
可以使得键入的错误发生几率最小,并使得命令可阅读性增强。


2):组合标准错误。
默认情况下,只是将标准输出发送给下一个程序的标准输入。
还可以将标准输出和标准错误组合一起当做另一个程序的标准输入。

# bourne shell家族:command1 2>&1 | command2ls -l file1(不存在文件) file2 2>&1 | sort
  • 1
  • 2
  • 3

–注意一个现象:
标准错误会比标准输出 先前打印。
这是为什么呢?
因为,在默认情况下,stdout是行缓冲的,它的输出会放在一个buffer里面,只有到换行的时候,才会写出。而stderr是无缓冲的,会直接输出,举例来说就是printf(stdout, “xxxx”) 和 printf(stdout, “xxxx\n”),前者会憋住,直到遇到新行才会一起输出。而printf(stderr, “xxxxx”),不管有么有\n,都输出。


3):过滤器(filter)
当创建管道线的时候,必须使用“能够从标准输入读取文本数据,并向标准输出写入文本数据的程序” 。 这样的程序就是 “过滤器”,且Unix上有很多过滤器。
管道线上的 过滤器 可以任意多,数量的唯一限制,就是对知识的掌握。


4):一个不得不说的命令。
因为管道线的正常I/O是从标准输出到标准输入这种单一模式,
而tee作用是 “从标准输入读取数据” , 并向’标准输出’和’一个或多个文件’ 发送同样一份数据,从而可以多个分支I/O。

语法:

 tee [-a(追加模式)]  file(希望保存数据的文件) |  1. tee 的输出保存不止一份副本。  2. tee 指定的文件不存在,将 新创建该文件。  3. tee 指定的文件已经存在,tee将重写覆盖该文件。  4. tee 使用-a选项将在文件末尾追加数据,而不是替换文件。$ cat names1 name2 name3 | tee f1 f2 |grep 'man'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

–技巧:
一种常用的使用模式:将数据保存到文件中的同时,发送到屏幕(标准输出)。

$ who 2>&1 | tee file | less
  • 1

tee 就相当于将 一份数据流引导成两份一样的数据流,流向不同的方向。


5):终止管道线
终止一个正在运行的管道线,请发送: ^C 信号。
当管道线中的一个程序终止时,其他程序就不会正常运行了。

总结:

掌握Unix的基本技能之一就是:”学会如何将程序组合成管道线去解决问题”。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从Shell脚本内部将所有标准输出及标准错误显示在屏幕并同时写入文件的方法
linux tee命令详解
shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等) Shell编程 卓越资源 - 专业Linux/Unix资料站
linux高性能服务器编程 (六) --高级I/O函数
系统架构设计总结—软件架构风格
数字化转型与架构-架构设计篇|什么是架构风格和架构模式?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服