1.初识xargs
自己在运维过程中,看到一种用法 find /etc -name '*.conf' | xargs grep 'mysql_close'
觉得xargs有些不清不楚,所以就详细研究了一下。
例:
echo --help | grep
echo --help | xargs grep
我觉得这个例子很经典,不妨一试,此例引用自网络。
然后我想了一下,第一个例子echo 的输出,也就是 --help,通过管道传输给grep,第二个例子,echo也是通过管道传输给xargs,这一步在两个例子中是相同的,即,到达grep和xargs命令前,两个命令的输入是相同的。也就是说xargs对数据做了转换,从而导致cat命令对参数发生了不同的理解。
想想,如果我们在终端输入cat --help,就会打印出帮助信息,但是如果通过管道传输给cat,却发现是--help字符串,说明,xargs模拟了我们手工的录入,即文件传给cat的方式不同了。
2.发生了什么?
管道的定义:管道就是一个文件,符合Linux下一切皆文件的哲学。第一个例子,我们使用管道,对管道文件写,然后grep在管道文件读。第二个是echo对管道文件写,xargs从管道文件读。grep等于在读一个文件,当然就会显示文件的内容。而xargs通过读取这个管道文件,就会把管道文件转换为标准输入STDIN,然后传给grep,就如同我们在终端输入了grep --help一样。
综上,xargs的作用在于,将管道文件读取成STDIN,然后传输给后续命令。
以上属于我的个人猜测,如有问题,希望大家指正。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29757574/viewspace-1787766/
,如需转载,请注明出处,否则将追究法律责任。