我在堡垒机上的多台机器上运行一个相同的 grep 命令。除了grep结果之外,我还想打印相应的IP地址。
ssh [email protected] sudo grep -A 2 hi /home/abc.txt
ssh [email protected] sudo grep -A 2 hi /home/abc.txt
我试过:
ssh [email protected] "sudo grep -A 2 hi /home/abc.txt && hostname"
ssh [email protected] "sudo grep -A 2 hi /home/abc.txt && hostname"
但它只1.5.3.9
在最后打印机器的主机名,而且也只打印一次。
最好的方法是什么?
答案1
好吧,您已经有了 IP 地址;所以你可以使用它:
for host in 1.5.4.7 1.5.3.9; do
ssh core@$host "sudo grep -A 2 hi /home/abc.txt" && \
printf "%s\n" "$host"
done
hostname
像您问题中的示例代码一样运行将输出主机名,不是IP地址你说你想要的。
&&
仅当(且仅当)后续命令的退出代码为零时,使用分隔命令才会运行后续命令;如果grep
没有找到匹配项,则不会返回零,并且不会执行第二个命令。
此外,虽然不太了解您的具体用例,但我通常发现运行这样的东西来向主机展示时很容易前要在主机上运行的输出而不是后,但这就像移动语句一样简单printf
(或者,如果您愿意,可以用echo "$host"
它代替)。