动态更新hosts文件来自文件

4
我有一个树莓派在我父亲家里,用作“Hive”(供暖/水控制)。 当他的ISP提供的动态IP更改时,树莓派通过SSH更新我的服务器上的文本文件。然后我使用此文件进行SSH连接,他使用此文件通过我的域名"/cleres"访问Web UI。
目前,我有一个丑陋的bash脚本,它复制我的整个hosts文件,除了最后一行(他的IP)到一个临时文件中,从文本文件获取新的IP,并将其附加到hosts文件中。
XXX.XXX.XXX.XXX      dad

我觉得这不是最好的方法,但是我找到的每篇关于动态主机文件更新的帖子似乎都是人们用自己的本地DHCP地址进行更新。我不想使用dyndns或noip,因为这是不必要的。我已经有了IP,我只需要在我的服务器上为它设置别名。
简而言之,我想知道是否有比复制整个文件并追加新的IP和主机更好的更新主机文件的方法。
如果有人感兴趣,我的域名是here
---丑陋的Bash脚本---
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

啊啊啊,为什么我没想到用sed... 如果谷歌搜索能返回有用的结果就好了 :) 谢谢DevSolar - DBMage
很高兴能够帮助。我已经将其转化为一个你可以接受的答案。;-) - DevSolar
1个回答

2

GNU sed可以进行文件内替换(sed -i "s/<regex>/replacement/" /etc/hosts)。显然,在使用-i选项之前,您需要首先测试正则表达式替换部分不包括该选项,直到它能够正常工作...


1
如果有人想知道,这是我做的方法: sed -i "s/\([^\t ]*\)\([\t ]*\)Dad/$ip\2Dad/g" /etc/hosts - DBMage
2
@DBMage:我不想拼出正则表达式,因为你在示例中写的是“dad”,但在代码中却是“Dad”。此外,我也不想成为摧毁你的/etc/hosts文件的人。;-) - DevSolar
2
没关系,我只是觉得把我是如何做到的(有了你的帮助)发出来会是个好主意。 - DBMage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接