xargs --replace/-I 用于单个参数

And*_*des 10 linux ssh bash command-line xargs

我正在尝试使用 xargs 为每个提供的参数运行一个命令,但不幸的是 --replace/-I 标志在与 -n 结合时似乎无法正常工作。无论 -n 选项如何,{} 似乎都将扩展为从 stdin 读取的完整参数列表。

不幸的是,网络上的所有示例似乎都是用于命令 (mv, cp, rm) 的,这些命令将采用多个参数,其中 {} 展开。

例如,在运行时:

echo a b c d | xargs -n 1 -I {} echo derp {}
Run Code Online (Sandbox Code Playgroud)

输出是:

derp a b c d
Run Code Online (Sandbox Code Playgroud)

但我预计:

derp a
derp b
derp c
derp d
Run Code Online (Sandbox Code Playgroud)

但是,在没有 -I {} 的情况下运行它会产生预期的结果:

echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Run Code Online (Sandbox Code Playgroud)

有没有办法用 xargs 实现这一点?我的最终目的是用它来运行多个(并行)ssh 会话,比如

echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Run Code Online (Sandbox Code Playgroud)

xargs (GNU findutils) 4.4.2在 RHEL 6.3 上运行。

ahi*_*end 5

您可以使用换行符回显以达到预期的结果。在您的服务器扩展的情况下,将是:

$ echo -e server{1..4}"\n" | xargs -I{} echo derp {}
derp server1
derp server2
derp server3
derp server4
Run Code Online (Sandbox Code Playgroud)