一直弄不懂,管道不就是把前一个命令的结果作为引数给下一个命令吗,那在 | 后面加不加 xargs 有什么区别
NewUserFF 写道:
懒蜗牛 Gentoo 写道:
管道是实现 “将前面的标准输出作为后面的标准输入”
xargs 是实现 “将标准输入作为命令的引数”
你可以试试执行:
程式码:
echo “–help”|cat
echo “–help”|xargs cat
看看结果的不同。
试过了,依然不是很确定的明白到底是什么意思,自己再探索一下看看把
如果你直接在命令列输入 cat 而不输入其余的任何东西,这时候的 cat 会等待标准输入,因此你这时候可以
通过键盘输入并按回车来让 cat 读取输入,cat 会原样返回。而如果你输入–help,那么 cat 程式会在标准输出上
列印自己的帮助文件。也就是说,管道符 | 所传递给程式的不是你简单地在程式名后面输入的引数,它们会被
程式内部的读取功能如 scanf 和 gets 等接收,而 xargs 则是将内容作为普通的引数传递给程式,相当于你手写了
cat –help
来自:http://forum.ubuntu.org.cn/viewtopic.php?t=354669
补充解释:
在一个目录中有如下三个档案
a.c b.c c.c
find . / -print 命令会列印出三个档名
find . / -print | grep a.c 只会列印出 a.c 这个档案
如果只输入命令 grep a.c
那么你在键盘中只输入 a.c 字串时,a.c 会被列印两次,否则只列印你输入的字元
如果要找三个档案中,那个档案包括有 hello 字元
find ./ -print | xargs grep hello
总结:管道符后不加 xargs 相当于先将 xargs 后面的命令回车执行一下再从键盘里输入
管道符前面命令执行的结果内容
加上 xargs 相当于直接从键盘输入管道符前面命令执行的结果内容再回车
再总结一下,就是回车的先后顺序不太一样。
文章来自互联网博客网站,版权归作者所有。