gpt4 book ai didi

linux - 从多个 shell 命令的输出创建一行

转载 作者:太空狗 更新时间:2023-10-29 11:21:14 32 4
gpt4 key购买 nike

我尝试通过 ssh 连接到多个主机(其中有数千个),捕获一些命令输出并写入文件。但是所有命令的输出都应该在同一行,逗号分隔,空格分隔,除了每个主机在同一行之外。

所以我的命令就像“:

ssh $host "hostname; uname -r; echo mypassword| sudo -S ipmitool mc info | grep 'Firmware Revision' " > ssh.out

但如果我这样使用,它会将所有命令输出写入单独的行。 (每个主机 3 行)。但我想要的只是每个主机一行,比方说:

myserver,3.2.45-0.6.wd.514,4.3 (comma or any field separator is fine)

我该怎么做?

最佳答案

使用 bash Array variables .将每个 ssh 命令的输出附加到数组。最后,echo 数组的所有元素。结果将是一行中的所有数组元素。设置IFS (内部字段分隔符)到所需的每个主机定界符。 (我使用了 ,。)要在同一 ssh session 中处理来自多个命令的多行输出,请使用 tr用分隔符替换换行符。 (我用了一个空格。)

代码

sshoutput=()

for host in host01 host02 host03; do
sshoutput+=($(ssh $host 'echo $(hostname; uname -a; echo mypassword) | tr "\n" " "'))
done

IFS=,; echo "${sshoutput[*]}";

输出

host01.domain.com Linux host01.domain.com 2.6.32-696.3.1.el6.x86_64 #1 SMP Thu Apr 20 11:30:02 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux mypassword ,host02.domain.com Linux host02.domain.com 2.6.32-696.3.1.el6.x86_64 #1 SMP Thu Apr 20 11:30:02 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux mypassword ,host03.domain.com Linux host03.domain.com 2.6.32-696.3.1.el6.x86_64 #1 SMP Thu Apr 20 11:30:02 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux mypassword 

关于linux - 从多个 shell 命令的输出创建一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315540/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com