我正在寻找一个 unix shell 命令来附加文件的内容作为另一个 shell 命令的参数。例如:
command << commandArguments.txt
xargs 是专门为此构建的:
cat commandArguments.txt | xargs mycommand
如果文件中有多行,则可以使用xargs -L1 -P10
一次并行运行十个命令副本。
xargs采用其标准并将其格式化为 shell 命令的位置参数。它最初旨在处理较短的命令行限制,但它也可用于其他目的。
例如,在最后一分钟内,我使用它并行连接到 10 个服务器并检查它们的正常运行时间:
echo server{1..10} | tr ' ' '\n' | xargs -n 1 -P 50 -I ^ ssh ^ uptime
此命令管道的一些有趣方面:
tr
每个名称放在自己的行中。这是因为xargs
需要以行分隔的输入-n
选项控制每次命令调用使用多少传入行。 表示为每条传入线路-n 1
创建一个新进程。ssh
-I
,可以指定一个标记 ( ^
),该标记将替换为参数。-P
运行多少子进程,极大地拓宽了有趣的可能性空间。command `cat commandArguments.txt`
使用反引号将使用封闭命令的结果作为外部命令中的文字