具有可变参数数量的xargs

时间:2018-02-09 11:18:21

标签: shell xargs

我正在尝试创建一个命令,以显示Nomad群集中所有正在运行的分配的日志。我可以使用此命令获取分配ID:

curl -s $NOMAD_ADDR/v1/allocations | jq -r '.[] | select(.JobID=="MY_JOB_NAME") | "\(.ID)"'

从那里我想为每个分配运行multitail nomad logs <allocation> -tail -f,以便我可以一次查看所有日志。多尾调用的语法如下所示:

multitail [options] -l "shell 1 command" -l "shell 2 command" -l...

如果你打开5个shell,那么你需要5个-l个参数。

我在xargs手册中没有看到此功能,但我需要xargs multitail --arg-for-each "-l my shell command {}"之类的内容。是否可以使用xargs以这种方式构造具有可变数量参数的命令?如果没有,我可以使用任何替代方案吗?

1 个答案:

答案 0 :(得分:2)

您的输入是ID列表。出于这个答案的目的,让我们说看起来像:

foo
bar
baz

您想将其转换为:

multitail \
    -l "nomad logs foo -tail -f" \
    -l "nomad logs bar -tail -f" \
    -l "nomad logs baz -tail -f"

也许这样的事情会起作用:

eval multitail $(command_that_generates_ids | xargs -IID echo "-l 'nomad logs ID -tail -f'")