Merge pull request #1113 from sofia-riese/patch-4

refactor(setproviders): replace recursion with while loop
This commit is contained in:
juewuy
2026-01-11 09:46:17 +08:00
committed by GitHub

View File

@@ -535,11 +535,14 @@ EOF
rm -rf "$TMPDIR"/providers rm -rf "$TMPDIR"/providers
fi fi
} }
setproviders(){ #自定义providers
# 自定义providers
setproviders() {
. "$CRASHDIR"/libs/set_cron.sh . "$CRASHDIR"/libs/set_cron.sh
. "$CRASHDIR"/libs/web_get_bin.sh . "$CRASHDIR"/libs/web_get_bin.sh
#获取模版名称 while true; do
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ];then # 获取模版名称
if [ -z "$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg)" ]; then
provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}') provider_temp_des=$(sed -n "1 p" "$CRASHDIR"/configs/${coretype}_providers.list | awk '{print $1}')
else else
provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}') provider_temp_file=$(grep "provider_temp_${coretype}" "$CRASHDIR"/configs/ShellCrash.cfg | awk -F '=' '{print $2}')
@@ -565,12 +568,13 @@ setproviders(){ #自定义providers
echo -e " 0 返回上级菜单" echo -e " 0 返回上级菜单"
read -p "请输入对应字母或数字 > " num read -p "请输入对应字母或数字 > " num
case "$num" in case "$num" in
0) "" | 0)
break
;; ;;
[1-9]|[1-9][0-9]) [1-9] | [1-9][0-9])
provider_name=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $1}') provider_name=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $1}')
provider_url=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $2}') provider_url=$(sed -n "$num p" "$CRASHDIR"/configs/providers.cfg | awk '{print $2}')
if [ -z "$provider_name" ];then if [ -z "$provider_name" ]; then
errornum errornum
else else
echo "-----------------------------------------------" echo "-----------------------------------------------"
@@ -582,11 +586,10 @@ setproviders(){ #自定义providers
echo -e " 0 返回上级菜单" echo -e " 0 返回上级菜单"
read -p "请选择需要执行的操作 > " num read -p "请选择需要执行的操作 > " num
case "$num" in case "$num" in
0) "" | 0) ;;
;;
1) 1)
read -p "请输入名称或者代号(不可重复,不支持纯数字) > " name read -p "请输入名称或者代号(不可重复,不支持纯数字) > " name
if [ -n "$name" ] && [ -z "$(echo "$name" | grep -E '^[0-9]+$')" ] && ! grep -q "$name" "$CRASHDIR"/configs/providers.cfg;then if [ -n "$name" ] && [ -z "$(echo "$name" | grep -E '^[0-9]+$')" ] && ! grep -q "$name" "$CRASHDIR"/configs/providers.cfg; then
sed -i "s|$provider_name $provider_url|$name $provider_url|" "$CRASHDIR"/configs/providers.cfg sed -i "s|$provider_name $provider_url|$name $provider_url|" "$CRASHDIR"/configs/providers.cfg
else else
echo -e "\033[31m输入错误请重新输入\033[0m" echo -e "\033[31m输入错误请重新输入\033[0m"
@@ -594,7 +597,7 @@ setproviders(){ #自定义providers
;; ;;
2) 2)
read -p "请输入链接地址或本地相对路径 > " link read -p "请输入链接地址或本地相对路径 > " link
if [ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && [ -z "$(grep "$link" "$CRASHDIR"/configs/providers.cfg)" ];then if [ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && [ -z "$(grep "$link" "$CRASHDIR"/configs/providers.cfg)" ]; then
link=$(echo $link | sed 's/\&/\\\&/g') #特殊字符添加转义 link=$(echo $link | sed 's/\&/\\\&/g') #特殊字符添加转义
sed -i "s|$provider_name $provider_url|$provider_name $link|" "$CRASHDIR"/configs/providers.cfg sed -i "s|$provider_name $provider_url|$provider_name $link|" "$CRASHDIR"/configs/providers.cfg
else else
@@ -611,9 +614,8 @@ setproviders(){ #自定义providers
errornum errornum
;; ;;
esac esac
sleep 1
fi fi
setproviders sleep 1
;; ;;
a) a)
echo "-----------------------------------------------" echo "-----------------------------------------------"
@@ -631,18 +633,17 @@ setproviders(){ #自定义providers
echo -e "链接地址/路径:\033[32m$link\033[0m" echo -e "链接地址/路径:\033[32m$link\033[0m"
read -p "确认添加?(1/0) > " res read -p "确认添加?(1/0) > " res
[ "$res" = 1 ] && { [ "$res" = 1 ] && {
echo "$name $link" >> "$CRASHDIR"/configs/providers.cfg echo "$name $link" >>"$CRASHDIR"/configs/providers.cfg
echo -e "\033[32mproviders已添加\033[0m" echo -e "\033[32mproviders已添加\033[0m"
} }
} }
} }
[ "$?" != 0 ] && echo -e "\033[31m输入错误操作已取消\033[0m" [ "$?" != 0 ] && echo -e "\033[31m输入错误操作已取消\033[0m"
sleep 1 sleep 1
setproviders
;; ;;
c) c)
echo "-----------------------------------------------" echo "-----------------------------------------------"
if [ -s "$CRASHDIR"/configs/providers.cfg ];then if [ -s "$CRASHDIR"/configs/providers.cfg ]; then
echo -e "\033[33msingboxr与mihomo内核的providers配置文件不互通\033[0m" echo -e "\033[33msingboxr与mihomo内核的providers配置文件不互通\033[0m"
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "确认生成${coretype}配置文件?(1/0) > " res read -p "确认生成${coretype}配置文件?(1/0) > " res
@@ -653,7 +654,6 @@ setproviders(){ #自定义providers
echo -e "\033[31m你还未添加链接或本地配置文件请先添加\033[0m" echo -e "\033[31m你还未添加链接或本地配置文件请先添加\033[0m"
sleep 1 sleep 1
fi fi
setproviders
;; ;;
b) b)
echo "-----------------------------------------------" echo "-----------------------------------------------"
@@ -666,11 +666,10 @@ setproviders(){ #自定义providers
echo "-----------------------------------------------" echo "-----------------------------------------------"
read -p "请输入对应字母或数字 > " num read -p "请输入对应字母或数字 > " num
case "$num" in case "$num" in
0) "" | 0) ;;
;;
a) a)
read -p "请输入模版的路径(绝对路径) > " dir read -p "请输入模版的路径(绝对路径) > " dir
if [ -s $dir ];then if [ -s $dir ]; then
provider_temp_file=$dir provider_temp_file=$dir
setconfig provider_temp_${coretype} $provider_temp_file setconfig provider_temp_${coretype} $provider_temp_file
echo -e "\033[32m设置成功\033[0m" echo -e "\033[32m设置成功\033[0m"
@@ -681,30 +680,31 @@ setproviders(){ #自定义providers
;; ;;
*) *)
provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${coretype}_providers.list 2>/dev/null | awk '{print $2}') provider_temp_file=$(sed -n "$num p" "$CRASHDIR"/configs/${coretype}_providers.list 2>/dev/null | awk '{print $2}')
if [ -z "$provider_temp_file" ];then if [ -z "$provider_temp_file" ]; then
errornum errornum
sleep 1
else else
setconfig provider_temp_${coretype} $provider_temp_file setconfig provider_temp_${coretype} $provider_temp_file
fi fi
;; ;;
esac esac
setproviders
;; ;;
d) d)
read -p "确认清空全部链接?(1/0) > " res read -p "确认清空全部链接?(1/0) > " res
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/configs/providers.cfg [ "$res" = "1" ] && rm -rf "$CRASHDIR"/configs/providers.cfg
setproviders
;; ;;
e) e)
echo -e "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m" echo -e "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m"
read -p "是否继续?(1/0) > " res read -p "是否继续?(1/0) > " res
[ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers [ "$res" = "1" ] && rm -rf "$CRASHDIR"/providers
setproviders
;; ;;
*) *)
errornum errornum
sleep 1
break
;; ;;
esac esac
done
} }
set_clash_adv(){ #自定义clash高级规则 set_clash_adv(){ #自定义clash高级规则