我想了解使用xargs man
在风铃草的代码 :
screen -t man /bin/sh -c 'xargs man || read'
由于风铃草:我们不需要猫!
为什么我们需要xargs
的命令?
据我所知, xargs
双组分如下
- 猫没什么xargs的
- 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, ...
不,我不知道cat
什么。 我的猫不论输入我得到我运行命令后。 cat
实际上是多余这里,让我们忽略它。
xargs man
等待用户输入。 这是必要的。 由于在脚本中,您从抓住,我不能在人的说法粘贴到后,我创建的窗口。 因此,在窗口中运行该命令需要等待我给它东西,它试图运行男人面前。
如果我们只是跑screen /bin/sh -d 'man || read'
screen /bin/sh -d 'man || read'
,它总是抱怨‘你想要什么手册?’ 因为我们从来没有告诉它。
xargs的从标准输入采集参数,并执行与参数给出的命令。
所以猫是在等待着什么需要键入,然后xargs的正在运行的人与该输入。
如果你有很多文件的处理xargs的是有用的,我经常与输出时使用它的发现。 xargs的会的东西,很多争论,因为它可以在命令行。
这是伟大的做这样的事情
find . -name '*.o' -print | xargs rm
该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
。