v1.0.0beta17.8
~增加了对padavan系统读取局域网设备过滤列表的支持 ~优化了配置文件保存方式,减少闪存消耗 ~修复了部分mipsle设备无法正确识别核心的bug ~修复了部分情况下订阅链接/配置链接丢失的bug ~修复了部分情况下会连续下载两次核心的bug
This commit is contained in:
@@ -11,6 +11,9 @@ getconfig(){
|
|||||||
yaml=$clashdir/config.yaml
|
yaml=$clashdir/config.yaml
|
||||||
#检查/读取标识文件
|
#检查/读取标识文件
|
||||||
[ ! -f $ccfg ] && echo '#标识clash运行状态的文件,不明勿动!' > $ccfg
|
[ ! -f $ccfg ] && echo '#标识clash运行状态的文件,不明勿动!' > $ccfg
|
||||||
|
#检查重复行并去除
|
||||||
|
[ -n "$(awk 'a[$0]++' $ccfg)" ] && awk '!a[$0]++' $ccfg > $ccfg
|
||||||
|
#使用source加载配置文件
|
||||||
source $ccfg
|
source $ccfg
|
||||||
#设置默认核心资源目录
|
#设置默认核心资源目录
|
||||||
[ -z "$bindir" ] && bindir=$clashdir
|
[ -z "$bindir" ] && bindir=$clashdir
|
||||||
@@ -78,7 +81,7 @@ getconfig(){
|
|||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
#检查新手引导
|
#检查新手引导
|
||||||
if [ -z "$userguide" ];then
|
if [ -z "$userguide" ];then
|
||||||
sed -i "1i\userguide=1" $ccfg
|
setconfig userguide 1
|
||||||
source $clashdir/getdate.sh && userguide
|
source $clashdir/getdate.sh && userguide
|
||||||
fi
|
fi
|
||||||
#检查执行权限
|
#检查执行权限
|
||||||
@@ -87,8 +90,7 @@ getconfig(){
|
|||||||
setconfig(){
|
setconfig(){
|
||||||
#参数1代表变量名,参数2代表变量值,参数3即文件路径
|
#参数1代表变量名,参数2代表变量值,参数3即文件路径
|
||||||
[ -z "$3" ] && configpath=$clashdir/mark || configpath=$3
|
[ -z "$3" ] && configpath=$clashdir/mark || configpath=$3
|
||||||
sed -i "/${1}*/"d $configpath
|
[ -n "$(grep ${1} $configpath)" ] && sed -i "s/${1}=.*/${1}=${2}/g" $configpath || echo "${1}=${2}" >> $configpath
|
||||||
echo "${1}=${2}" >> $configpath
|
|
||||||
}
|
}
|
||||||
#启动相关
|
#启动相关
|
||||||
errornum(){
|
errornum(){
|
||||||
@@ -124,7 +126,7 @@ clashstart(){
|
|||||||
}
|
}
|
||||||
checkrestart(){
|
checkrestart(){
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
echo -e "\033[32m检测到配置文件已变更,需要重启clash服务以生效!\033[0m"
|
echo -e "\033[32m检测到已变更的内容,请重启clash服务!\033[0m"
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
read -p "是否现在重启clash服务?(1/0) > " res
|
read -p "是否现在重启clash服务?(1/0) > " res
|
||||||
[ "$res" = 1 ] && clashstart
|
[ "$res" = 1 ] && clashstart
|
||||||
@@ -178,7 +180,7 @@ setport(){
|
|||||||
read -p "请输入Http/Sock5用户名及密码 > " input
|
read -p "请输入Http/Sock5用户名及密码 > " input
|
||||||
if [ "$input" = "0" ];then
|
if [ "$input" = "0" ];then
|
||||||
authentication=""
|
authentication=""
|
||||||
sed -i "/authentication*/"d $ccfg
|
setconfig authentication
|
||||||
echo 密码已移除!
|
echo 密码已移除!
|
||||||
else
|
else
|
||||||
if [ "$local_proxy" = "已开启" ];then
|
if [ "$local_proxy" = "已开启" ];then
|
||||||
@@ -267,8 +269,8 @@ setdns(){
|
|||||||
elif [ "$num" = 3 ]; then
|
elif [ "$num" = 3 ]; then
|
||||||
dns_nameserver=""
|
dns_nameserver=""
|
||||||
dns_fallback=""
|
dns_fallback=""
|
||||||
sed -i "/dns_nameserver*/"d $ccfg
|
setconfig dns_nameserver
|
||||||
sed -i "/dns_fallback*/"d $ccfg
|
setconfig dns_fallback
|
||||||
echo -e "\033[33mDNS配置已重置!!!\033[0m"
|
echo -e "\033[33mDNS配置已重置!!!\033[0m"
|
||||||
setdns
|
setdns
|
||||||
elif [ "$num" = 4 ]; then
|
elif [ "$num" = 4 ]; then
|
||||||
@@ -364,9 +366,10 @@ macfilter(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
[ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases'
|
[ -z "$dhcpdir" ] && dhcpdir='/var/lib/dhcp/dhcpd.leases'
|
||||||
[ -f /var/lib/dhcpd/dhcpd.leases ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases'
|
[ -z "$dhcpdir" ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases'
|
||||||
[ -f /tmp/dhcp.leases ] && dhcpdir='/tmp/dhcp.leases'
|
[ -z "$dhcpdir" ] && dhcpdir='/tmp/dhcp.leases'
|
||||||
|
[ -z "$dhcpdir" ] && dhcpdir='/tmp/dnsmasq.leases'
|
||||||
[ -z "$dhcpdir" ] && dhcpdir='/dev/null'
|
[ -z "$dhcpdir" ] && dhcpdir='/dev/null'
|
||||||
[ -z "$macfilter_type" ] && macfilter_type='黑名单'
|
[ -z "$macfilter_type" ] && macfilter_type='黑名单'
|
||||||
[ "$macfilter_type" = "黑名单" ] && macfilter_over='白名单' || macfilter_over='黑名单'
|
[ "$macfilter_type" = "黑名单" ] && macfilter_over='白名单' || macfilter_over='黑名单'
|
||||||
@@ -798,7 +801,7 @@ clashadv(){
|
|||||||
if [ "$dns_no" = "已禁用" ];then
|
if [ "$dns_no" = "已禁用" ];then
|
||||||
read -p "检测到内置DNS已被禁用,是否启用内置DNS?(1/0) > " res
|
read -p "检测到内置DNS已被禁用,是否启用内置DNS?(1/0) > " res
|
||||||
if [ "$res" = "1" ];then
|
if [ "$res" = "1" ];then
|
||||||
sed -i "/dns_no*/"d $ccfg
|
setconfig dns_no
|
||||||
setdns
|
setdns
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
@@ -1008,8 +1011,10 @@ clashsh(){
|
|||||||
elif [ "$num" = 2 ]; then
|
elif [ "$num" = 2 ]; then
|
||||||
checkcfg=$(cat $ccfg)
|
checkcfg=$(cat $ccfg)
|
||||||
clashcfg
|
clashcfg
|
||||||
checkcfg_new=$(cat $ccfg)
|
if [ -n "$PID" ];then
|
||||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
checkcfg_new=$(cat $ccfg)
|
||||||
|
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||||
|
fi
|
||||||
clashsh
|
clashsh
|
||||||
|
|
||||||
elif [ "$num" = 3 ]; then
|
elif [ "$num" = 3 ]; then
|
||||||
@@ -1050,15 +1055,23 @@ clashsh(){
|
|||||||
elif [ "$num" = 7 ]; then
|
elif [ "$num" = 7 ]; then
|
||||||
checkcfg=$(cat $ccfg)
|
checkcfg=$(cat $ccfg)
|
||||||
clashadv
|
clashadv
|
||||||
checkcfg_new=$(cat $ccfg)
|
if [ -n "$PID" ];then
|
||||||
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
checkcfg_new=$(cat $ccfg)
|
||||||
|
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||||
|
fi
|
||||||
clashsh
|
clashsh
|
||||||
|
|
||||||
elif [ "$num" = 8 ]; then
|
elif [ "$num" = 8 ]; then
|
||||||
source $clashdir/getdate.sh && testcommand
|
source $clashdir/getdate.sh && testcommand
|
||||||
|
|
||||||
elif [ "$num" = 9 ]; then
|
elif [ "$num" = 9 ]; then
|
||||||
|
checkcfg=$(cat $ccfg)
|
||||||
source $clashdir/getdate.sh && update
|
source $clashdir/getdate.sh && update
|
||||||
|
if [ -n "$PID" ];then
|
||||||
|
checkcfg_new=$(cat $ccfg)
|
||||||
|
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart
|
||||||
|
fi
|
||||||
|
clashsh
|
||||||
|
|
||||||
else
|
else
|
||||||
errornum
|
errornum
|
||||||
|
|||||||
@@ -394,26 +394,28 @@ getcpucore(){
|
|||||||
[ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="386"
|
[ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="386"
|
||||||
[ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="amd64"
|
[ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="amd64"
|
||||||
if [ -n "$(echo $cputype | grep -E "linux.*mips.*")" ];then
|
if [ -n "$(echo $cputype | grep -E "linux.*mips.*")" ];then
|
||||||
mipstype=$(echo -n I | hexdump -o | awk '{ print substr($2,6,1); exit}') #通过判断大小端判断mips或mipsle
|
mipstype=$(echo -n I | hexdump -o 2>/dev/null | awk '{ print substr($2,6,1); exit}') #通过判断大小端判断mips或mipsle
|
||||||
[ "$mipstype" != "1" ] && cpucore="mips-softfloat" || cpucore="mipsle-softfloat"
|
[ "$mipstype" = "0" ] && cpucore="mips-softfloat" || cpucore="mipsle-softfloat"
|
||||||
fi
|
fi
|
||||||
[ -n "$cpucore" ] && setconfig cpucore $cpucore
|
[ -n "$cpucore" ] && setconfig cpucore $cpucore
|
||||||
}
|
}
|
||||||
setcpucore(){
|
setcpucore(){
|
||||||
cpucore_list="armv5 armv7 armv8 386 amd64 \nmipsle-softfloat mipsle-hardfloat mips-softfloat"
|
cpucore_list="armv5 armv7 armv8 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat"
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
echo -e "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用!\033[0m"
|
echo -e "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用!\033[0m"
|
||||||
echo -e "当前可供在线下载的处理器架构为:"
|
echo -e "当前可供在线下载的处理器架构为:"
|
||||||
echo -e "\033[32m$cpucore_list\033[0m"
|
echo $cpucore_list | awk -F " " '{for(i=1;i<=NF;i++) {print i" "$i }}'
|
||||||
echo -e "如果您的CPU架构未在以上列表中,请运行【uname -a】命令,并复制好返回信息"
|
echo -e "如果您的CPU架构未在以上列表中,请运行【uname -a】命令,并复制好返回信息"
|
||||||
echo -e "之后前往 t.me/clashfm 群提交或 github.com/juewuy/ShellClash 提交issue"
|
echo -e "之后前往 t.me/clashfm 群提交或 github.com/juewuy/ShellClash 提交issue"
|
||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
read -p "请手动输入处理器架构 > " cpucore
|
read -p "请输入对应数字 > " num
|
||||||
if [ -z "$(echo $cpucore_list |grep "$cpucore")" ];then
|
setcpucore=$(echo $cpucore_list | awk '{print $"'"$num"'"}' )
|
||||||
|
if [ -z "$setcpucore" ];then
|
||||||
echo -e "\033[31m请输入正确的处理器架构!\033[0m"
|
echo -e "\033[31m请输入正确的处理器架构!\033[0m"
|
||||||
sleep 1
|
sleep 1
|
||||||
cpucore=""
|
cpucore=""
|
||||||
else
|
else
|
||||||
|
cpucore=$setcpucore
|
||||||
setconfig cpucore $cpucore
|
setconfig cpucore $cpucore
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -770,9 +772,8 @@ update(){
|
|||||||
read -p "请输入对应数字 > " num
|
read -p "请输入对应数字 > " num
|
||||||
if [ -z "$num" ]; then
|
if [ -z "$num" ]; then
|
||||||
errornum
|
errornum
|
||||||
clashsh
|
|
||||||
elif [ "$num" = 0 ]; then
|
elif [ "$num" = 0 ]; then
|
||||||
clashsh
|
i=
|
||||||
elif [ "$num" = 1 ]; then
|
elif [ "$num" = 1 ]; then
|
||||||
getsh
|
getsh
|
||||||
|
|
||||||
@@ -840,9 +841,7 @@ update(){
|
|||||||
update
|
update
|
||||||
else
|
else
|
||||||
errornum
|
errornum
|
||||||
clashsh
|
|
||||||
fi
|
fi
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
#新手引导
|
#新手引导
|
||||||
userguide(){
|
userguide(){
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ getconfig(){
|
|||||||
setconfig(){
|
setconfig(){
|
||||||
#参数1代表变量名,参数2代表变量值,参数3即文件路径
|
#参数1代表变量名,参数2代表变量值,参数3即文件路径
|
||||||
[ -z "$3" ] && configpath=$clashdir/mark || configpath=$3
|
[ -z "$3" ] && configpath=$clashdir/mark || configpath=$3
|
||||||
sed -i "/${1}*/"d $configpath
|
[ -n "$(grep ${1} $configpath)" ] && sed -i "s/${1}=.*/${1}=${2}/g" $configpath || echo "${1}=${2}" >> $configpath
|
||||||
echo "${1}=${2}" >> $configpath
|
|
||||||
}
|
}
|
||||||
compare(){
|
compare(){
|
||||||
if [ ! -f $1 -o ! -f $2 ];then
|
if [ ! -f $1 -o ! -f $2 ];then
|
||||||
@@ -422,7 +421,6 @@ web_save(){
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
#使用get_save获取面板节点设置
|
#使用get_save获取面板节点设置
|
||||||
#get_save http://localhost:${db_port}/proxies | awk -F "{" '{for(i=1;i<=NF;i++) print $i}' | grep -E '^"all".*"Selector"' | grep -oE '"name".*"now".*",' | sed 's/"name"://g' | sed 's/"now"://g'| sed 's/"//g' > /tmp/clash_web_save_$USER
|
|
||||||
get_save http://localhost:${db_port}/proxies | awk -F "{" '{for(i=1;i<=NF;i++) print $i}' | grep -E '^"all".*"Selector"' > /tmp/clash_web_check_$USER
|
get_save http://localhost:${db_port}/proxies | awk -F "{" '{for(i=1;i<=NF;i++) print $i}' | grep -E '^"all".*"Selector"' > /tmp/clash_web_check_$USER
|
||||||
while read line ;do
|
while read line ;do
|
||||||
def=$(echo $line | awk -F "[\[,]" '{print $2}')
|
def=$(echo $line | awk -F "[\[,]" '{print $2}')
|
||||||
@@ -430,8 +428,10 @@ web_save(){
|
|||||||
[ "$def" != "$now" ] && echo $line | grep -oE '"name".*"now".*",' | sed 's/"name"://g' | sed 's/"now"://g'| sed 's/"//g' >> /tmp/clash_web_save_$USER
|
[ "$def" != "$now" ] && echo $line | grep -oE '"name".*"now".*",' | sed 's/"name"://g' | sed 's/"now"://g'| sed 's/"//g' >> /tmp/clash_web_save_$USER
|
||||||
done < /tmp/clash_web_check_$USER
|
done < /tmp/clash_web_check_$USER
|
||||||
#对比文件,如果有变动且不为空则写入磁盘,否则清除缓存
|
#对比文件,如果有变动且不为空则写入磁盘,否则清除缓存
|
||||||
[ ! -s /tmp/clash_web_save_$USER ] && compare /tmp/clash_web_save_$USER $clashdir/web_save
|
if [ -s /tmp/clash_web_save_$USER ];then
|
||||||
[ "$?" = 0 ] && rm -rf /tmp/clash_web_save_$USER || mv -f /tmp/clash_web_save_$USER $clashdir/web_save
|
compare /tmp/clash_web_save_$USER $clashdir/web_save
|
||||||
|
[ "$?" = 0 ] && rm -rf /tmp/clash_web_save_$USER || mv -f /tmp/clash_web_save_$USER $clashdir/web_save
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
web_restore(){
|
web_restore(){
|
||||||
put_save(){
|
put_save(){
|
||||||
|
|||||||
Reference in New Issue
Block a user