Merge pull request #1150 from sofia-riese/patch-1

refactor(load_ddns): replace recursion with while loop
This commit is contained in:
juewuy
2026-01-18 10:41:38 +08:00
committed by GitHub

View File

@@ -135,7 +135,9 @@ rev_ddns_service() {
sleep 1 sleep 1
fi fi
} }
load_ddns() { load_ddns() {
while true; do
ddns_dir=/etc/config/ddns ddns_dir=/etc/config/ddns
tmp_dir="$TMPDIR"/ddns tmp_dir="$TMPDIR"/ddns
[ ! -f "$ddns_dir" ] && { [ ! -f "$ddns_dir" ] && {
@@ -145,34 +147,33 @@ load_ddns() {
} }
nr=0 nr=0
cat "$ddns_dir" | grep 'config service' | awk '{print $3}' | sed "s/'//g" | sed 's/"//g' >"$tmp_dir" cat "$ddns_dir" | grep 'config service' | awk '{print $3}' | sed "s/'//g" | sed 's/"//g' >"$tmp_dir"
echo ----------------------------------------------- echo "-----------------------------------------------"
echo -e "列表 域名 启用 IP地址" echo -e "列表 域名 启用 IP地址"
echo ----------------------------------------------- echo "-----------------------------------------------"
[ -s "$tmp_dir" ] && for service in $(cat "$tmp_dir"); do [ -s "$tmp_dir" ] && for service in $(cat "$tmp_dir"); do
# echo $service >>$tmp_dir # echo $service >>$tmp_dir
nr=$((nr + 1)) nr=$((nr + 1))
enabled=$(uci get ddns."$service".enabled 2>/dev/null) enabled=$(uci get ddns."$service".enabled 2>/dev/null)
domain=$(uci get ddns."$service".domain 2>/dev/null) domain=$(uci get ddns."$service".domain 2>/dev/null)
local_ip=$(sed '1!G;h;$!d' /var/log/ddns/$service.log 2>/dev/null | grep -E 'Registered IP' | tail -1 | awk -F "'" '{print $2}' | tr -d "'\"") local_ip=$(sed '1!G;h;$!d' /var/log/ddns/"$service".log 2>/dev/null | grep -E 'Registered IP' | tail -1 | awk -F "'" '{print $2}' | tr -d "'\"")
echo -e " $nr $domain $enabled $local_ip" echo -e " $nr $domain $enabled $local_ip"
done done
echo -e " $((nr + 1)) 添加DDNS服务" echo -e " $((nr + 1)) 添加DDNS服务"
echo -e " 0 退出" echo -e " 0 退出"
echo ----------------------------------------------- echo "-----------------------------------------------"
read -p "请输入对应序号 > " num read -r -p "请输入对应序号 > " num
if [ -z "$num" -o "$num" = 0 ]; then if [ -z "$num" ] || [ "$num" = 0 ]; then
i= i=
rm -rf "$tmp_dir"
break
elif [ "$num" -gt $nr ]; then elif [ "$num" -gt $nr ]; then
set_ddns_type set_ddns_type
load_ddns elif [ "$num" -gt 0 ] && [ "$num" -le $nr ]; then
elif [ "$num" -gt 0 -a "$num" -le $nr ]; then service=$(cat "$tmp_dir" | sed -n "$num"p)
service=$(cat $tmp_dir | sed -n "$num"p)
rev_ddns_service rev_ddns_service
load_ddns
else else
echo "请输入正确数字!" && load_ddns echo "请输入正确数字!"
sleep 1
fi fi
rm -rf "$tmp_dir" done
} }