使用 xargs 灵活调整参数数量

使用 xargs 灵活调整参数数量

是否可以指定所xargs采用的参数数量,而无需使用选项明确执行-n,而是使用分隔符隐式执行,以便单个参数将用空格分隔,但 xargs 一次采用的一组参数将用例如分隔'\n'

我希望能够向脚本传递灵活数量的参数:这些参数存储在如下列表中:

param1 param2
param1 param2 param3
param1

应该可以一次将一行参数传递给脚本。我不想使用任何代理脚本,也不想将临时文件列表或命令写入磁盘。我想从文件中读取参数,动态更改它们(例如删除每隔一行),然后使用 xargs 将它们重定向到目标脚本。

我尝试将其用作'\n'参数分隔符,但是,即使一行中的所有参数以空格分隔,它们也会被解释为一个参数。

答案1

我想要实现的是通过 xargs 传递以下列表,但一次一行:

A

$ cat t7.txt
param1 param2
param1 param2 param3
param1

$ cat t7.sh
#!/bin/bash
cat t7.txt | while read line
do
  echo $line | xargs echo XXX
done

$ ./t7.sh
XXX param1 param2
XXX param1 param2 param3
XXX param1

但是有更简单的方法可以在不使用 xargs 的情况下实现此输出,因此您可能需要澄清您的问题。


更新

$ while read line; do echo "< $line >"; done
p1 p2
< p1 p2 >
p1
< p1 >
p1 p2 p3
< p1 p2 p3 >

我不认为 xargs 能解决您的问题。我怀疑您最好使用一些脚本来代替 xargs。

答案2

使用 GNU Parallel 您可以执行以下操作:

cat yourfile | parallel -q bash -c 'echo {}'

如果可以接受将参数连接成一个,那么您甚至可以执行以下操作:

cat yourfile | parallel echo {}

您可以通过以下方式轻松安装 GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

观看 GNU Parallel 的介绍视频以了解更多信息: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

相关内容