我父亲家里有一个Raspberry Pi用作“Hive”(加热/水控制)。
我的爸爸有一个由他的ISP提供的动态IP,当它更改Pi更新我的服务器上的文本文件(通过ssh)。然后我使用它来SSH和他通过我的域“/ cleres”上的URL访问Web UI。
目前我有一个丑陋的bash脚本,它将我的整个主机文件(最后一行(他的IP)除外)复制到临时文件,从文本文件中获取新IP,并更新附加的主机文件
XXX.XXX.XXX.XXX dad
我觉得这不是最好的方法,但是每个关于动态主机文件更新的帖子(我发现)似乎都是用自己的本地DHCP地址更新它的人。我不想使用 dyndns 或 noip ,因为这是不必要的。我已经有了IP,我只需要在服务器上对它进行别名处理。
TLDR 我想知道是否有更好的方法来更新我的主机文件,而不是复制整个内容并添加新的IP&主机。
如果有人有兴趣,我的域名为here。
--- UGLY BASH SCRIPT ---
ip="$(cat /media/dad/dadextip.txt)"
check="$(cat /etc/hosts | grep $ip | sed -e 's/\< Dad\>//g')"
if [[ $check != *[^0-9]* ]]; then
cat /etc/hosts | grep -v Dad > /tmp/tmphosts
cat /tmp/tmphosts > /etc/hosts
echo "$ip Dad" >> /etc/hosts
cat /tmp/tmphosts > /var/spool/postfix/etc/hosts
echo "$ip Dad" >> /var/spool/postfix/etc/hosts
cat /etc/webmin/servers/1448542326.serv | grep -v host > /tmp/tmphosts
cat /tmp/tmphosts > /etc/webmin/servers/1448542325.serv
echo "host=$ip" >> /etc/webmin/servers/1448542326.serv
exit 0
elif [ $check != $ip ]; then
cat /etc/hosts | grep -v Dad > /tmp/tmphosts
cat /tmp/tmphosts > /etc/hosts
echo "$ip Dad" >> /etc/hosts
cat /tmp/tmphosts > /var/spool/postfix/etc/hosts
echo "$ip Dad" >> /var/spool/postfix/etc/hosts
cat /etc/webmin/servers/1448542326.serv | grep -v host > /tmp/tmphosts
cat /tmp/tmphosts > /etc/webmin/servers/1448542326.serv
exit 0
else
exit 0
fi
答案 0 :(得分:1)
GNU sed
可以进行文件内替换(sed -i "s/<regex>/replacement/" /etc/hosts
)。显然,您希望首先测试正则表达式替换部分而不使用 -i
选项,直到它有效...