我编写了一个简单的 Bash 脚本来更改 Linux 主机的网络地址:
#!/bin/sh
REMOTE_HOST=192.168.2.127 # Default Host address
NEW_IP=192.168.30.33 # New IP I want to set
NEW_GW=192.168.30.1 # New Gateway I want to set
sudo ifconfig eth0 192.168.2.1 # Moving to the right network...
#ping $REMOTE_HOST -c 3 # I can correctly ping the host here...
ssh-copy-id root@${REMOTE_HOST} > /dev/null # ...for my comfort...
# Setting the network with new values for the IP addr and the GW...
COMMAND="sed -i 's@address *\\([0-9.]\\+\\)@address ${NEW_IP}@' /etc/network/interfaces\
&& sed -i 's@gateway *\\([0-9.]\\+\\)@gateway ${NEW_GW}@' /etc/network/interfaces"
ssh root@${REMOTE_HOST} $COMMAND
# done!
# Now restart the network services:
ssh root@${REMOTE_HOST} "/etc/init.d/networking restart &" & # (Note the 2nd '&' !!!)
# Come back to my old IP
sudo ifconfig eth0 192.168.30.10
sudo route add default gw 192.168.30.1
该脚本几乎可以完美运行,但是:
1)如果我从我的主文件夹运行它,没有问题;如果我从 NFS 共享文件夹运行它,脚本会挂起一两分钟才能正确结束
2)如果我在主机上重新启动网络时省略了第二个“&”,则命令永远不会返回......
问题是:
1) 是什么导致了长时间的等待(NFS、不同的 IP 地址、不同的网关)?是否有可能解决它?
2)为什么会发生?我怎么能避免呢?
感谢您的任何帮助,并为我的英语不好感到抱歉!