管道符 |
没错,只是一条竖线而已。它可以将它左边命令的输出结果放到它右边的命令里作为输入参数。
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)数据转换成命令行参数,也能够从文件的输出中读取数据。
-
什么是
STDIN
STDOUT
STDERR
?大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
摘自: Shell 输入/输出重定向