xargs如何让输出内容附带对应的输入参数标识
解决方案
方案1:适配rx单输出行场景
如果你的rx脚本对每台主机只会输出单行结果,直接调整xargs执行逻辑即可:
gethosts | xargs -L1 -I% sh -c 'echo "%,$(rx % some-command)"'
解释:
- 用
sh -c包裹多步逻辑,先执行rx % some-command拿到远程执行结果 - 直接把主机名(即占位符
%的实际值)和执行结果用逗号拼接后输出
方案2:适配rx多输出行场景
如果rx对单台主机会返回多行输出,需要给每一行都加上主机前缀,用sed处理输出即可:
gethosts | xargs -L1 -I% sh -c 'rx % some-command | sed "s/^/%,/"'
解释:
- sed的
s/^/%,/逻辑是给每一行输出的开头位置,插入主机名,的前缀 - 不管单台主机返回多少行结果,每一行都会对应标注所属主机
补充说明
如果命令中包含特殊字符、空格,注意做好转义,也可以改用printf代替echo获得更稳定的格式化效果:
gethosts | xargs -L1 -I% sh -c 'printf "%s,%s\n" "%" "$(rx % some-command)"'
如果环境中安装了GNU Parallel,写法可以更简洁:
gethosts | parallel 'printf "%s,%s\n" {} "$(rx {} some-command)"'
内容的提问来源于stack exchange,提问作者xrfang
相关产品推荐
相关产品推荐

