首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更好地理解xargs

更好地理解xargs
EN

Stack Overflow用户
提问于 2009-07-13 20:13:26
回答 3查看 1.9K关注 0票数 3

我想了解xargs manRampion's code中的使用

代码语言:javascript
复制
screen -t man /bin/sh -c 'xargs man || read'

感谢Rampion:我们不需要猫!

为什么命令中需要xargs

我对xargs -part的理解如下

  1. cat nothing to xargs
  2. xargs列出了man -commands

我有一个想法,就是xargs列出了一系列命令。例如,

代码语言:javascript
复制
find . -type f -print0 | xargs -0 grep masi 

与命令列表相同:

代码语言:javascript
复制
find fileA AND grep masi in it 
find fileB AND grep masi in it 
           and so on for fileC, fileD, ...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-13 20:18:16

不,我什么都不cat。在运行命令后,我会禁止任何输入。cat实际上是无关的,所以让我们忽略它。

xargs man在等待用户输入。这是必要的。因为在脚本中,您抓取了它,直到创建了窗口之后,我才能为man粘贴参数。因此,在窗口中运行的命令需要等待我给它一些东西,然后它才会试图运行man。

如果我们只运行screen /bin/sh -d 'man || read',它总是会抱怨“您想要什么手册页?”因为我们从来没说过。

票数 4
EN

Stack Overflow用户

发布于 2009-07-13 20:31:11

xargs收集stdin中的参数,并执行这些参数所给出的命令。

所以猫在等待输入,然后xargs用这个输入运行man。

如果您有很多文件要处理,xargs是很有用的,我经常将它与find的输出一起使用。xargs将尽可能多地将参数填充到命令行。

做这样的事是很棒的

代码语言:javascript
复制
find . -name '*.o' -print | xargs rm
票数 3
EN

Stack Overflow用户

发布于 2009-07-13 20:39:34

cat命令不对任何操作;它对标准输入进行操作,直到被告知输入结束为止。正如Rampion所指出的,这里没有必要使用cat命令,但它是对它的隐式输入(标准输入)进行操作,而不是对任何东西操作。

xargs命令读取来自cat的输出,并将信息分组为指定为(仅)参数的man命令的参数。当达到极限(在命令行上可配置)时,它将执行man命令。

find ... -print0 | xargs -0 ...成语处理包含诸如空格、制表符和换行符等尴尬字符的文件名。find命令打印每个文件名,后面跟着一个ASCII ('\0');这是不能出现在简单文件名中的两个字符之一--另一个字符是'/‘(当然,它出现在路径名称中,但不出现在简单的文件名中)。它不直接等同于您提供的序列;xargs将文件名集合组合成一个参数列表,但不超过大小限制。如果名称足够短(通常是这样),那么执行grep的次数将比文件名少。

注意,如果有多个要搜索的文件,grep只打印文件名,如果它支持一个选项,那么它总是打印文件名并使用该选项:'-H‘是grep的GNU扩展名。确保文件名始终出现的可移植方法是将/dev/null列为第一个文件(所以是'xargs grep something /dev/null');搜索/dev/null不需要很长时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1121776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档