我对此很困惑。需要一些澄清。
示例1:
pgrep string | xargs ps
示例2:
find . | xargs grep whatever
从示例 1 中,我推测是这样的:
搜索作为正在运行的进程名称的一部分的“字符串”,并将所有匹配的进程 ID 返回到“xargs ps” -> 它将 ps 附加到匹配(它们本身就是进程 ID)以获得相同的结果输出为:
ps <processid>
有人可以解释 xargs 在这种情况下到底做了什么吗?
从示例 2 中,我推测是这样的:
它是从当前工作目录递归地搜索一些“字符串”。
在这里,“xargs”究竟是如何工作的?
我认为“xargs”重复地将标准输入中的数据附加到提供给 xargs 的“参数”(通常本身就是一个 UNIX 命令)。
来自 xargs() 手册页:
xargs 从标准输入读取项目,以空格分隔(可以是
用双引号或单引号或反斜杠保护)或换行符,以及
使用任何命令执行一次或多次命令(默认为 /bin/echo)
初始参数后跟从标准输入读取的项目。空行
标准输入上的内容将被忽略。
一般来说xargs像这样使用
prog | xargs utility
where prog
预计会输出一个或多个换行符/空格分隔的结果。诀窍是xargs
不一定会调用utility
每个结果一次,而是将结果拆分为子列表并调用utility
对于每个子列表。如果你想强制 xargs 调用utility
对于每一个结果,您都需要调用它xargs -L1
.
注意xargs
向您保证子列表发送到utility
短于ARG_MAX
(如果您好奇,您可以获取当前值ARG_MAX
using getconf ARG_MAX
.) 这就是它如何避免那些可怕的“参数列表太长” errors.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)