我想了解xargs man在Rampion's code中的使用
screen -t man /bin/sh -c 'xargs man || read'感谢Rampion:我们不需要猫!
为什么命令中需要xargs ?
我对xargs -part的理解如下
我有一个想法,就是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, ...发布于 2009-07-13 20:18:16
不,我什么都不cat。在运行命令后,我会禁止任何输入。cat实际上是无关的,所以让我们忽略它。
xargs man在等待用户输入。这是必要的。因为在脚本中,您抓取了它,直到创建了窗口之后,我才能为man粘贴参数。因此,在窗口中运行的命令需要等待我给它一些东西,然后它才会试图运行man。
如果我们只运行screen /bin/sh -d 'man || read',它总是会抱怨“您想要什么手册页?”因为我们从来没说过。
发布于 2009-07-13 20:31:11
xargs收集stdin中的参数,并执行这些参数所给出的命令。
所以猫在等待输入,然后xargs用这个输入运行man。
如果您有很多文件要处理,xargs是很有用的,我经常将它与find的输出一起使用。xargs将尽可能多地将参数填充到命令行。
做这样的事是很棒的
find . -name '*.o' -print | xargs rm发布于 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不需要很长时间。
https://stackoverflow.com/questions/1121776
复制相似问题