linux命令行管道总结
一. 标准错误也能进管道
默认情况下,标准错误是不会进入管道的,看下面例子,wc -l 的统计结果为 2
$ ls -l /mnt/ /notexists
ls: cannot access '/notexists': No such file or directory
/mnt/:
total 0
$ ls -l /mnt/ /notexists | wc -l
ls: cannot access '/notexists': No such file or directory
2
除了标准输出,标准错误也可以和标准输出同时进入管道,使用|&
即可,它是2>&1|
的简写
$ ls -l /mnt/ /notexists |& wc -l
3
$ ls -l /mnt/ /notexists 2>&1| wc -l
3
二. 编写读取管道数据的脚本
如果想让你的脚步读取管道数据,其实就是程序能冲标准输入读取数据这里是read -r line
- 编写 example.sh
#!/bin/bash
while read -r line;do
echo $line
done
- 使用 example.sh
# 读取ls -l 的标准输出、标准错误 到 example.sh 的标准输入
$ ls -l /mnt/ /notexists 2>&1| bash example.sh
ls: cannot access '/notexists': No such file or directory
/mnt/:
total 0
# wc -l 统计 example.sh 的标准输出
$ ls -l /mnt/ /notexists 2>&1| bash example.sh | wc -l
3