如何循环执行命令直到获取非空IP并写入/etc/ip.txt
解决方案
你可以通过Shell的while循环实现重试逻辑,直到成功写入非空的IP地址到目标文件为止,参考实现如下:
# 提前创建文件并配置权限,无需每次循环重复执行 sudo touch /etc/ip.txt sudo chmod a+rwx /etc/ip.txt # 循环执行直到获取到有效IP while true; do sudo printf %s "$(hostname -I)" > /etc/ip.txt # 判断文件存在且内容非空则终止循环 if [ -s /etc/ip.txt ]; then break fi # 等待1秒后重试,可根据实际需求调整等待时长 sleep 1 done
可选优化
- 如果你的设备存在多网卡多IP场景,只需要保留第一个IP,可以修改写入命令为:
sudo printf %s "$(hostname -I | awk '{print $1}')" > /etc/ip.txt - 如果需要排除127.0.0.1这类回环地址,可以增加过滤逻辑:
sudo printf %s "$(hostname -I | awk '{for(i=1;i<=NF;i++) if($i!~/^127\./) {print $i;exit}}')" > /etc/ip.txt
内容的提问来源于stack exchange,提问作者Jbro
相关产品推荐
相关产品推荐

