【发布时间】:2010-12-26 06:20:32
【问题描述】:
我对此感到非常困惑。需要澄清一下。
示例 1:
pgrep string | xargs ps
示例 2:
find . | xargs grep whatever
从示例 1 中,我收集它是这样的:
搜索一个“字符串”,它是正在运行的进程名称的一部分,并将所有匹配项的进程 ID 返回到 'xargs ps' -> 它只是将 ps 附加到匹配项(它们本身就是进程 ID)到得到相同的输出:
ps <processid>
有人能解释一下 xargs 在这种情况下的真正作用吗?
从示例 2 中,我是这样收集的:
就是从当前工作目录中递归搜索一些“字符串”。 在这里,“xargs”究竟是如何工作的?
我认为'xargs' 反复将来自标准输入的数据附加到给 xargs 的'argument'(这通常是一个 UNIX 命令本身)。
来自 xargs() 手册页:
xargs 从标准输入读取项目,由空格分隔(可以是 用双引号或单引号或反斜杠保护)或换行符,以及 执行命令(默认为 /bin/echo)一次或多次 初始参数后跟从标准输入读取的项目。空行 在标准输入上被忽略。
【问题讨论】:
-
xargs 的作用类似于“命令替代”(至少对于 Bash)。它将多行结果(垂直)转换为单行标记参数列表(水平)。 (请注意,在将结果传递给 xargs 之前,您可能会稍微过滤一下结果(使用 sed for ex)。加上 xargs 处理可能在 linux 内核 2.6.23 之前出现的 « too much arguments » 错误(参见 wikipedia )。这里是another helpful thread