具有可变数量参数的 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'")
我正在尝试创建一个命令来显示 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'")