要了解xargs的更好(To understand xargs better)

2019-06-25 19:26发布

我想了解使用xargs man在风铃草的代码 :

screen -t man /bin/sh -c 'xargs man || read'

由于风铃草:我们不需要猫!

为什么我们需要xargs的命令?

据我所知, xargs双组分如下

  1. 猫没什么xargs的
  2. xargs的使人 - 命令的列表

我不得不说xargs的使命令列表的想法。 例如,

find . -type f -print0 | xargs -0 grep masi 

是相同的命令的列表:

find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...

Answer 1:

不,我不知道cat什么。 我的猫不论输入我得到我运行命令后。 cat实际上是多余这里,让我们忽略它。

xargs man等待用户输入。 这是必要的。 由于在脚本中,您从抓住,我不能在人的说法粘贴到后,我创建的窗口。 因此,在窗口中运行该命令需要等待我给它东西,它试图运行男人面前。

如果我们只是跑screen /bin/sh -d 'man || read' screen /bin/sh -d 'man || read' ,它总是抱怨‘你想要什么手册?’ 因为我们从来没有告诉它。



Answer 2:

xargs的从标准输入采集参数,并执行与参数给出的命令。

所以猫是在等待着什么需要键入,然后xargs的正在运行的人与该输入。

如果你有很多文件的处理xargs的是有用的,我经常与输出时使用它的发现。 xargs的会的东西,很多争论,因为它可以在命令行。
这是伟大的做这样的事情

find . -name '*.o' -print | xargs rm


Answer 3:

cat命令不就没事操作; 它运行在标准输入,直到它被告知输入结束。 作为风铃草指出,该cat命令在此没有必要,但其隐含的输入(标准输入)操作,而不是什么都没有。

xargs命令读取从输出cat ,和组的信息转换成参数给man指定为它的(仅)参数命令。 当达到限制(在命令行配置),将执行的man命令。

find ... -print0 | xargs -0 ... find ... -print0 | xargs -0 ...成语用含有尴尬的字符,如空格,制表符和换行符的文件名交易。 该find命令打印每个文件名之后是ASCII NUL( '\0' ); 这是不能出现在一个简单的文件名的两个字符之一 - 另一个是“/”(出现在路径名,当然,但不是简单的文件名)。 它不是直接等同于你所提供的序列; xargs文件名的群体集合到一个单一的参数列表,由大小限制。 如果名字足够短(他们通常是),那么就会有更少的执行grep比有文件名。

还要注意,在grep只打印在材料中发现,如果有一个以上的文件中搜索文件名-或者如果它支持一个选项,使其始终打印文件名和选项用于:' -H “是一个GNU扩展grep做这个。 以确保文件名总是出现简单的方法是列出/dev/null作为第一个文件(所以“ xargs grep something /dev/null ”); 它并不需要很长时间来搜索/dev/null



文章来源: To understand xargs better
标签: shell xargs