Linux 管道符号 | (pipe) 二三事
管道符 |
没错,只是一条竖线而已。它可以将它左边命令的输出结果放到它右边的命令里作为输入参数。
command1 | command2 | command3
注:管道命令必须能够接受来自前一个命令的数据成为 standard input (STDIN 标准输入)继续处理。
例1:
在 ping 命令的帮助信息中, 找到带有 timeout 关键字的 行
ping --help | grep "timeout"
output:
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
-w timeout Timeout in milliseconds to wait for each reply.
PS:
grep 命令分析一行信息,如果有匹配的,就将该行拿出来。
用法可参考 Linux 可用于管道操作的命令 中的 grep 部分
例2:
以 echo 的输出 创建 文件夹名
echo foo | mkdir
会报错。
echo foo | xargs mkdir
这样就可以了
原因:
有些命令是不接受管道传参 的, 有些 命令是接受管道传参
不接受管道传参: echo mkdir 等
接受管道传参: grep 等
通过 xargs 把 echo 的 STDOUT (标准输出) 转成 命令行参数 传给了 mkdir, 这样就创建了 foo 文件夹。
附
-
xargs 原理图
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。

-
什么是
STDINSTDOUTSTDERR?大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
摘自: Shell 输入/输出重定向

浙公网安备 33010602011771号