在前面对管道线的讨论中,您学习了如何接受一个命令的输出,并将它用作另一个命令的输入。反过来,假设您想将一个命令或文件的内容作为另一个命令的参数而不是输入。管道线不能用于实现该目的。三种常见的解决办法是:
xargs 命令 带有 -exec 选项的 find 命令 命令替换您将首先了解第一个解决办法。我们曾经在清单 9 中创建了一个强制制表符,您可以从中看到命令替换的例子。可以在命令行上使用命令替换,但在脚本中使用它则更常见;您将在本系列的后续文章中更多地了解它和脚本。查看我们的“学习 Linux,101: LPIC-1 路线图 ”获得本系列所有文章的简介和链接。
xargs 命令读取标准的输入,然后使用参数作为输入构建和执行命令。如果没有给出命令,那么将使用 echo 命令。清单 12 是使用我们的 text1 文件的基础例子,它包含 3 个行,每行只有两个单词。
清单 12. 使用 xargs
[ian@echidna lpi103-4]$ cat text1 1 apple 2 pear 3 banana [ian@echidna lpi103-4]$ xargs<text1 1 apple 2 pear 3 banana
为什么 xargs 只有一行输出?默认情况下,xargs 在空格处中断输出,并且每个生成的标记都成为一个参数。不过,当 xargs 构建命令时,它将一次传递尽可能多的参数。您可以使用 -n 覆盖该行为,或使用 --max-args 参数。在清单 13 中,我们使用了这两种方法,并为使用 xargs 添加一个显式的 echo 调用。