具有可变数量参数的 xargs

xargs with variable number of arguments

我正在尝试创建一个命令来显示 Nomad 集群中所有 运行ning 分配的日志。我可以使用此命令获取分配 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 以这种方式构造具有可变数量参数的命令?如果没有,我可以使用其他替代方法吗?

您输入的是 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'")