bash 中 while读取文件并通过 ssh执行命令出现的问题及解决方法
最近在做一些集群管理的简单脚本,其中有一部分是将文件中的机器名读取,并将应用通过scp传输,通过ssh解压部署。
#! /bin/bash
while read IP
do
scp adfs-*.tar.gz $IP:~
ssh $IP tar -zxf adfs-*.tar.gz
done<machine
一开始写了个简单的脚本,通过machine读取所有机器名,在进行操作。
可是运行以后发现,只有第一次循环成功运行,剩下的都没有运行。
google了一下,是由于bash中while循环调用ssh后会使用subshell,导致后续操作无法进行。
解决方法为在ssh上加参数-n,即可成功运行。
#! /bin/bash
while read IP
do
scp adfs-*.tar.gz $IP:~
ssh -n $IP tar -zxf adfs-*.tar.gz
done<machine
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步