管道与xargs
假设当前目录下有3个文件: a.txt、b.txt、c.txt
它们的内容如下
a.txt:
ha ha ha
i am a.txt
b.txt:
ha ha ha
i am b.txt
c.txt:
ha ha ha
i am c.txt
1)执行:
>ls
输出
a.txt b.txt c.txt
2)执行
>ls | cat
输出
a.txt
b.txt
c.txt
3)执行
>ls | echo
输出
(输出空行)
4)执行
>ls | xargs echo
输出
a.txt b.txt c.txt
5)执行
>ls | xargs cat
输出
ha ha ha
i am a.txt
ha ha ha
i am b.txt
ha ha ha
i am c.txt
分析:
管道其实是一个共享文件,又叫pipe文件。
前一个命令本来要输出到终端的内容,输入到了pipe文件中。
然后后一个命令再把pipe文件作为一个参数。
而xargs 则是把pipe文件的内容作为参数。
例如:
ls | cat
其实相当于 ls > 管道文件 ; cat 管道文件
ls | echo
其实相当于 ls > 管道文件 ; echo 管道文件
cat 文件名 是显示文件的内容
echo 文件名 就只是显示文件名
所以:
ls | cat 相当于显示管道文件的内容
ls | echo 相当于显示管道文件的文件名,管道文件是没名字的,所以就什么也不显示了
而 xargs 可以把管道文件的内容转换为参数
所以:
ls | xargs echo 会显示 当前目录下的文件名
而 ls | xargs cat 会显示当前目录下所有文件的内容