mirror of
https://github.com/juewuy/ShellCrash.git
synced 2026-03-12 16:31:25 +00:00
Compare commits
10 Commits
bd9abee53f
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4363195f3 | ||
|
|
8bcaac1f66 | ||
|
|
e84bca30b9 | ||
|
|
81d6b36c51 | ||
|
|
0f96cc8c0e | ||
|
|
c5da0da08a | ||
|
|
ed635b871a | ||
|
|
a32b05a391 | ||
|
|
9e78370c5c | ||
|
|
c66c642ca2 |
@@ -10,9 +10,9 @@ proxy-groups:
|
|||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -43,11 +43,10 @@ rules:
|
|||||||
- GEOSITE,media,🌍 国外媒体
|
- GEOSITE,media,🌍 国外媒体
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- GEOIP,games,🕹️ 游戏平台
|
|
||||||
- GEOIP,media,🌍 国外媒体
|
- GEOIP,media,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -10,9 +10,9 @@ proxy-groups:
|
|||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -39,11 +39,10 @@ rules:
|
|||||||
- GEOSITE,media,🌍 国外媒体
|
- GEOSITE,media,🌍 国外媒体
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- GEOIP,games,🕹️ 游戏平台
|
|
||||||
- GEOIP,media,🌍 国外媒体
|
- GEOIP,media,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
#DustinWin-gesite轻量规则
|
#DustinWin-gesite轻量规则
|
||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [全球直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [全球直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -20,9 +20,9 @@ proxy-groups:
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
- GEOSITE,private,🔒 私有网络
|
- GEOSITE,private,🔒 私有网络
|
||||||
- GEOSITE,tld-proxy,🧱 代理域名
|
- GEOSITE,tld-proxy,🌎 国外域名
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -8,9 +8,9 @@ proxy-groups:
|
|||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -39,9 +39,9 @@ rules:
|
|||||||
- GEOSITE,games-cn,🎮 游戏服务
|
- GEOSITE,games-cn,🎮 游戏服务
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -8,9 +8,9 @@ proxy-groups:
|
|||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -35,9 +35,9 @@ rules:
|
|||||||
- GEOSITE,games-cn,🎮 游戏服务
|
- GEOSITE,games-cn,🎮 游戏服务
|
||||||
- GEOSITE,ai,🤖 AI 平台
|
- GEOSITE,ai,🤖 AI 平台
|
||||||
- GEOSITE,networktest,📈 网络测试
|
- GEOSITE,networktest,📈 网络测试
|
||||||
- GEOSITE,proxy,🧱 代理域名
|
- GEOSITE,proxy,🌎 国外域名
|
||||||
- GEOSITE,cn,🛡️ 直连域名
|
- GEOSITE,cn,🇨🇳 国内域名
|
||||||
- GEOIP,private,🔒 私有网络,no-resolve
|
- GEOIP,private,🔒 私有网络,no-resolve
|
||||||
- GEOIP,cn,🀄️ 直连 IP
|
- GEOIP,cn,🀄️ 国内 IP
|
||||||
- GEOIP,telegram,📲 电报消息,no-resolve
|
- GEOIP,telegram,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
@@ -12,9 +12,9 @@ proxy-groups:
|
|||||||
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -178,14 +178,6 @@ rule-providers:
|
|||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
gamesip:
|
|
||||||
type: http
|
|
||||||
behavior: ipcidr
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/gamesip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/gamesip.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
netflixip:
|
netflixip:
|
||||||
type: http
|
type: http
|
||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
@@ -216,12 +208,11 @@ rules:
|
|||||||
- RULE-SET,media,🌍 国外媒体
|
- RULE-SET,media,🌍 国外媒体
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- RULE-SET,gamesip,🕹️ 游戏平台
|
|
||||||
- RULE-SET,netflixip,🎥 奈飞视频
|
- RULE-SET,netflixip,🎥 奈飞视频
|
||||||
- RULE-SET,mediaip,🌍 国外媒体
|
- RULE-SET,mediaip,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ proxy-groups:
|
|||||||
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📹 油管视频, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🌍 国外媒体, type: select, proxies: [🚀 节点选择, 👑 高级节点, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 📋 Trackerslist, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -167,14 +167,6 @@ rule-providers:
|
|||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/telegramip.mrs"
|
||||||
interval: 86400
|
interval: 86400
|
||||||
|
|
||||||
gamesip:
|
|
||||||
type: http
|
|
||||||
behavior: ipcidr
|
|
||||||
format: mrs
|
|
||||||
path: ./ruleset/gamesip.mrs
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@mihomo-ruleset/gamesip.mrs"
|
|
||||||
interval: 86400
|
|
||||||
|
|
||||||
netflixip:
|
netflixip:
|
||||||
type: http
|
type: http
|
||||||
behavior: ipcidr
|
behavior: ipcidr
|
||||||
@@ -204,12 +196,11 @@ rules:
|
|||||||
- RULE-SET,media,🌍 国外媒体
|
- RULE-SET,media,🌍 国外媒体
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- RULE-SET,gamesip,🕹️ 游戏平台
|
|
||||||
- RULE-SET,netflixip,🎥 奈飞视频
|
- RULE-SET,netflixip,🎥 奈飞视频
|
||||||
- RULE-SET,mediaip,🌍 国外媒体
|
- RULE-SET,mediaip,🌍 国外媒体
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
proxy-groups:
|
proxy-groups:
|
||||||
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, 👉 手动选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🎯 本地直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
- {name: 🎯 本地直连, type: select, proxies: [DIRECT, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, DIRECT]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, DIRECT]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
|
|
||||||
@@ -75,8 +75,8 @@ rule-providers:
|
|||||||
|
|
||||||
rules:
|
rules:
|
||||||
- RULE-SET,private,DIRECT
|
- RULE-SET,private,DIRECT
|
||||||
- RULE-SET,tld-proxy,🧱 代理域名
|
- RULE-SET,tld-proxy,🌎 国外域名
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🎯 本地直连
|
- RULE-SET,cn,🎯 本地直连
|
||||||
- RULE-SET,privateip,DIRECT,no-resolve
|
- RULE-SET,privateip,DIRECT,no-resolve
|
||||||
- RULE-SET,cnip,🎯 本地直连
|
- RULE-SET,cnip,🎯 本地直连
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ proxy-groups:
|
|||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -152,9 +152,9 @@ rules:
|
|||||||
- RULE-SET,games-cn,🎮 游戏服务
|
- RULE-SET,games-cn,🎮 游戏服务
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ proxy-groups:
|
|||||||
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🪟 微软服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇬 谷歌服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🍎 苹果服务, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🛡️ 直连域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🇨🇳 国内域名, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🀄️ 直连 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
- {name: 🀄️ 国内 IP, type: select, proxies: [🎯 本地直连, 🚀 节点选择]}
|
||||||
- {name: 🧱 代理域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
- {name: 🌎 国外域名, type: select, proxies: [🚀 节点选择, 🎯 本地直连]}
|
||||||
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
- {name: 📲 电报消息, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}]}
|
||||||
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
- {name: 🔒 私有网络, type: select, proxies: [🎯 本地直连], hidden: true}
|
||||||
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
- {name: 🐟 漏网之鱼, type: select, proxies: [🚀 节点选择, 🇭🇰 香港节点, 🇹🇼 台湾节点, 🇯🇵 日本节点, 🇸🇬 新加坡节点, 🇺🇸 美国节点, 👑 高级节点, 📉 省流节点, {providers_tags}, 🎯 本地直连]}
|
||||||
@@ -140,9 +140,9 @@ rules:
|
|||||||
- RULE-SET,games-cn,🎮 游戏服务
|
- RULE-SET,games-cn,🎮 游戏服务
|
||||||
- RULE-SET,ai,🤖 AI 平台
|
- RULE-SET,ai,🤖 AI 平台
|
||||||
- RULE-SET,networktest,📈 网络测试
|
- RULE-SET,networktest,📈 网络测试
|
||||||
- RULE-SET,proxy,🧱 代理域名
|
- RULE-SET,proxy,🌎 国外域名
|
||||||
- RULE-SET,cn,🛡️ 直连域名
|
- RULE-SET,cn,🇨🇳 国内域名
|
||||||
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
- RULE-SET,privateip,🔒 私有网络,no-resolve
|
||||||
- RULE-SET,cnip,🀄️ 直连 IP
|
- RULE-SET,cnip,🀄️ 国内 IP
|
||||||
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
- RULE-SET,telegramip,📲 电报消息,no-resolve
|
||||||
- MATCH,🐟 漏网之鱼
|
- MATCH,🐟 漏网之鱼
|
||||||
|
|||||||
@@ -169,13 +169,6 @@ rule-providers:
|
|||||||
behavior: domain
|
behavior: domain
|
||||||
proxy: DIRECT
|
proxy: DIRECT
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
|
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/games.mrs"
|
||||||
gamesip:
|
|
||||||
type: http
|
|
||||||
format: mrs
|
|
||||||
interval: 86400
|
|
||||||
behavior: ipcidr
|
|
||||||
proxy: DIRECT
|
|
||||||
url: "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/mihomo-ruleset/gamesip.mrs"
|
|
||||||
mediaip:
|
mediaip:
|
||||||
type: http
|
type: http
|
||||||
format: mrs
|
format: mrs
|
||||||
@@ -247,7 +240,6 @@ rules:
|
|||||||
|
|
||||||
- RULE-SET,proxy,🌐 国际流量
|
- RULE-SET,proxy,🌐 国际流量
|
||||||
- RULE-SET,cn,🀄️ 国内流量
|
- RULE-SET,cn,🀄️ 国内流量
|
||||||
- RULE-SET,gamesip,🎮 外服游戏
|
|
||||||
- RULE-SET,mediaip,🌍 国际媒体
|
- RULE-SET,mediaip,🌍 国际媒体
|
||||||
- RULE-SET,cnip,🀄️ 国内流量
|
- RULE-SET,cnip,🀄️ 国内流量
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
||||||
@@ -47,14 +47,13 @@
|
|||||||
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" },
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
|
||||||
{ "rule_set": [ "gamesip" ], "outbound": "🕹️ 游戏平台" },
|
|
||||||
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
||||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
||||||
],
|
],
|
||||||
@@ -195,14 +194,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "gamesip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/gamesip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/gamesip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "netflixip",
|
"tag": "netflixip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📹 油管视频", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "🌍 国外媒体", "type": "selector", "outbounds": [ "🚀 节点选择", "👑 高级节点", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "📋 Trackerslist", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||||
@@ -44,14 +44,13 @@
|
|||||||
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
{ "rule_set": [ "media" ], "outbound": "🌍 国外媒体" },
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" },
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" },
|
||||||
{ "rule_set": [ "gamesip" ], "outbound": "🕹️ 游戏平台" },
|
|
||||||
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
{ "rule_set": [ "netflixip" ], "outbound": "🎥 奈飞视频" },
|
||||||
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
{ "rule_set": [ "mediaip" ], "outbound": "🌍 国外媒体" }
|
||||||
],
|
],
|
||||||
@@ -184,14 +183,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cnip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "gamesip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/gamesip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/gamesip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "netflixip",
|
"tag": "netflixip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"outbounds": [
|
"outbounds": [
|
||||||
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
{ "tag": "🚀 节点选择", "type": "selector", "outbounds": [ "♻️ 自动选择", "👉 手动选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", "🎯 本地直连", {providers_tags} ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
"route": {
|
"route": {
|
||||||
"rules": [
|
"rules": [
|
||||||
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "private" ], "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "tld-proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "tld-proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
{ "rule_set": [ "cn" ], "outbound": "🎯 本地直连" },
|
||||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
{ "tag": "🛑 广告域名", "type": "selector", "outbounds": [ "🔴 全球拦截", "🎯 本地直连" ] },
|
||||||
@@ -39,13 +39,13 @@
|
|||||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" }
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🪟 微软服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇬 谷歌服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🍎 苹果服务", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🛡️ 直连域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🇨🇳 国内域名", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🀄️ 直连 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
{ "tag": "🀄️ 国内 IP", "type": "selector", "outbounds": [ "🎯 本地直连", "🚀 节点选择" ] },
|
||||||
{ "tag": "🧱 代理域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
{ "tag": "🌎 国外域名", "type": "selector", "outbounds": [ "🚀 节点选择", "🎯 本地直连" ] },
|
||||||
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
{ "tag": "📲 电报消息", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags} ] },
|
||||||
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
{ "tag": "🐟 漏网之鱼", "type": "selector", "outbounds": [ "🚀 节点选择", "🇭🇰 香港节点", "🇹🇼 台湾节点", "🇯🇵 日本节点", "🇸🇬 新加坡节点", "🇺🇸 美国节点", "👑 高级节点", "📉 省流节点", {providers_tags}, "🎯 本地直连" ] },
|
||||||
{ "tag": "🎯 本地直连", "type": "direct" },
|
{ "tag": "🎯 本地直连", "type": "direct" },
|
||||||
@@ -36,13 +36,13 @@
|
|||||||
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
{ "rule_set": [ "games-cn" ], "outbound": "🎮 游戏服务" },
|
||||||
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
{ "rule_set": [ "ai" ], "outbound": "🤖 AI 平台" },
|
||||||
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
{ "rule_set": [ "networktest" ], "outbound": "📈 网络测试" },
|
||||||
{ "rule_set": [ "proxy" ], "outbound": "🧱 代理域名" },
|
{ "rule_set": [ "proxy" ], "outbound": "🌎 国外域名" },
|
||||||
{ "rule_set": [ "cn" ], "outbound": "🛡️ 直连域名" },
|
{ "rule_set": [ "cn" ], "outbound": "🇨🇳 国内域名" },
|
||||||
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
{ "ip_is_private": true, "outbound": "🎯 本地直连" },
|
||||||
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
{ "rule_set": [ "telegramip" ], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4", "match_only": true},
|
||||||
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 直连 IP" }
|
{ "rule_set": [ "cnip" ], "outbound": "🀄️ 国内 IP" }
|
||||||
|
|
||||||
],
|
],
|
||||||
"rule_set": [
|
"rule_set": [
|
||||||
|
|||||||
@@ -77,7 +77,6 @@
|
|||||||
{ "rule_set": ["telegramip"], "outbound": "📲 电报消息" },
|
{ "rule_set": ["telegramip"], "outbound": "📲 电报消息" },
|
||||||
|
|
||||||
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" },
|
{ "action": "resolve", "server": "dns_proxy", "strategy": "prefer_ipv4" },
|
||||||
{ "rule_set": ["gamesip"], "outbound": "🎮 外服游戏" },
|
|
||||||
{ "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" },
|
{ "rule_set": ["mediaip"], "outbound": "🌍 国际媒体" },
|
||||||
{ "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" }
|
{ "rule_set": ["cnip"], "outbound": "🀄️ 国内流量" }
|
||||||
],
|
],
|
||||||
@@ -242,14 +241,6 @@
|
|||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs",
|
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/telegramip.srs",
|
||||||
"download_detour": "DIRECT"
|
"download_detour": "DIRECT"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"tag": "gamesip",
|
|
||||||
"type": "remote",
|
|
||||||
"format": "binary",
|
|
||||||
"path": "./ruleset/gamesip.srs",
|
|
||||||
"url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@refs/heads/sing-box-ruleset/gamesip.srs",
|
|
||||||
"download_detour": "DIRECT"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"tag": "mediaip",
|
"tag": "mediaip",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
|
|||||||
@@ -131,3 +131,33 @@ ADV_TABLE_INPUT="请输入路由表编号(不清楚请勿修改,建议 102-1
|
|||||||
# =================================================
|
# =================================================
|
||||||
IPV6_REDIR="IPv6透明路由(劫持IPv6流量)"
|
IPV6_REDIR="IPv6透明路由(劫持IPv6流量)"
|
||||||
IPV6_DNS="IPv6-DNS解析(是否返回IPv6地址)"
|
IPV6_DNS="IPv6-DNS解析(是否返回IPv6地址)"
|
||||||
|
SET_YES="是"
|
||||||
|
SET_NO_BACK="否,返回上级菜单"
|
||||||
|
SET_SKIP_CERT_NOW="当前"
|
||||||
|
SET_ENABLED="已启用"
|
||||||
|
SET_DISABLED="已禁用"
|
||||||
|
SET_SKIP_CERT_ENABLE_Q="跳过本地证书验证,是否确认启用?"
|
||||||
|
SET_SKIP_CERT_DISABLE_Q="跳过本地证书验证,是否确认禁用?"
|
||||||
|
SET_SNIFFER_NOW="当前"
|
||||||
|
SET_SNIFFER_ENABLE_Q="域名嗅探,是否确认启用?"
|
||||||
|
SET_SNIFFER_DISABLE_Q="域名嗅探,是否确认禁用?"
|
||||||
|
SET_LANG_ZH="简体中文"
|
||||||
|
SET_LANG_EN="English"
|
||||||
|
SET_SWITCH_RERUN="切换成功!请重新运行脚本!"
|
||||||
|
SET_SWITCH_OK="切换成功!"
|
||||||
|
SET_MODE_SUFFIX="模式"
|
||||||
|
SET_SET_TO="设为"
|
||||||
|
SET_BYPASS_TCP="TCP旁路转发"
|
||||||
|
SET_BYPASS_TU="T&U旁路转发"
|
||||||
|
SET_BYPASS_TCP_DESC="仅转发TCP流量至旁路由"
|
||||||
|
SET_BYPASS_TU_DESC="转发TCP&UDP流量至旁路由"
|
||||||
|
SET_FW_AREA_CURRENT="当前路由劫持范围:"
|
||||||
|
SET_WARN="注意:"
|
||||||
|
SET_DESC="说明:"
|
||||||
|
SET_BYPASS_WARN_1="此功能存在多种风险如无网络基础请勿尝试!"
|
||||||
|
SET_BYPASS_WARN_2="如需代理UDP,请确保旁路由运行了支持UDP代理的模式!"
|
||||||
|
SET_BYPASS_WARN_3="如使用systemd方式启动,内核依然会空载运行,建议使用保守模式!"
|
||||||
|
SET_BYPASS_DESC_1="此功能不启动内核仅配置防火墙转发,且子设备无需额外设置网关DNS"
|
||||||
|
SET_BYPASS_DESC_2="支持防火墙分流及设备过滤,支持部分定时任务,但不支持ipv6"
|
||||||
|
SET_INPUT_BYPASS_IPV4="请直接输入旁路由IPV4地址"
|
||||||
|
SET_TIPS_ENTER_BACK="Tips:直接回车确认可返回上级菜单"
|
||||||
|
|||||||
@@ -4,3 +4,97 @@ TASK_RECOM_TITLE="是否启用以下推荐的自动任务配置:"
|
|||||||
TASK_RECOM_ITEM_1="运行时每10分钟自动保存面板配置"
|
TASK_RECOM_ITEM_1="运行时每10分钟自动保存面板配置"
|
||||||
TASK_RECOM_ITEM_2="服务启动后自动同步 NTP 时间"
|
TASK_RECOM_ITEM_2="服务启动后自动同步 NTP 时间"
|
||||||
TASK_RECOM_ITEM_3="在每日的3点0分重启服务"
|
TASK_RECOM_ITEM_3="在每日的3点0分重启服务"
|
||||||
|
TASK5_RUN_TASK="执行任务:"
|
||||||
|
TASK5_CONFIRM_ADD_CRON="是否确认添加定时任务?"
|
||||||
|
TASK5_YES="是"
|
||||||
|
TASK5_NO="否"
|
||||||
|
TASK5_TASK_PREFIX="任务【"
|
||||||
|
TASK5_TASK_ADDED="】\033[32m已添加!\033[0m"
|
||||||
|
TASK5_USER_ADD_HINT1="命令可包含空格,请确保命令可执行!"
|
||||||
|
TASK5_USER_ADD_HINT2="请勿附带执行条件,执行条件请在命令添加完成后再返回设置!"
|
||||||
|
TASK5_USER_ADD_HINT3="亦可手动编辑"
|
||||||
|
TASK5_USER_ADD_HINT4="以添加命令"
|
||||||
|
TASK5_INPUT_CMD="请直接输入命令语句"
|
||||||
|
TASK5_OR_BACK="或输入 0 返回上级菜单"
|
||||||
|
TASK5_INPUT="请输入"
|
||||||
|
TASK5_CHECK_INPUT="请检查输入:"
|
||||||
|
TASK5_INPUT_REMARK="请输入任务备注"
|
||||||
|
TASK5_CUSTOM_TASK="自定义任务"
|
||||||
|
TASK5_CUSTOM_ADDED="自定义任务已添加!"
|
||||||
|
TASK5_INPUT_ERROR="输入错误,请重新输入!"
|
||||||
|
TASK5_USER_DEL_HINT1="请输入对应ID移除对应自定义任务(不会影响内置任务)"
|
||||||
|
TASK5_USER_DEL_HINT2="也可以手动编辑"
|
||||||
|
TASK5_NO_CUSTOM_TASK="你暂未添加任何自定义任务"
|
||||||
|
TASK5_SELECT_ADD="请选择需要添加的任务:"
|
||||||
|
TASK5_SELECT_COND="请选择任务"
|
||||||
|
TASK5_SELECT_COND2="执行条件:"
|
||||||
|
TASK5_COND_1="定时任务\033[32m每周执行\033[0m"
|
||||||
|
TASK5_COND_2="定时任务\033[32m每日执行\033[0m"
|
||||||
|
TASK5_COND_3="定时任务\033[32m每小时执行\033[0m"
|
||||||
|
TASK5_COND_4="定时任务\033[32m每分钟执行\033[0m"
|
||||||
|
TASK5_WARN_LINE1=" - - - - - - - - -\033[31m注意\033[0m- - - - - - - - -"
|
||||||
|
TASK5_WARN_LINE2=" 逻辑水平不及格的请勿使用下方触发条件!"
|
||||||
|
TASK5_WARN_LINE3=" - - - - - - - - - - - - - - - - - - - -"
|
||||||
|
TASK5_COND_5="服务\033[33m启动前执行\033[0m"
|
||||||
|
TASK5_COND_6="服务\033[33m启动后执行\033[0m"
|
||||||
|
TASK5_COND_7="服务\033[33m运行时每分钟执行\033[0m"
|
||||||
|
TASK5_COND_8="防火墙服务\033[33m重启后执行\033[0m"
|
||||||
|
TASK5_WEEK_HINT1="输入 1~7 对应\033[33m每周的指定某天\033[0m运行(7=周日)"
|
||||||
|
TASK5_WEEK_HINT2="输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行"
|
||||||
|
TASK5_WEEK_HINT3="输入 1~5 代表\033[36m周一至周五\033[0m运行"
|
||||||
|
TASK5_WEEK_INPUT="在每周哪天执行?"
|
||||||
|
TASK5_HOUR_INPUT1="想在该日的具体哪个小时执行?(0~23)"
|
||||||
|
TASK5_CRON_WEEK="在每周"
|
||||||
|
TASK5_CRON_WEEK2="的"
|
||||||
|
TASK5_OCLOCK="点整"
|
||||||
|
TASK5_DAY_HINT1="输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行"
|
||||||
|
TASK5_DAY_HINT2="输入 6~18 代表\033[36m早6点至晚18点间每小时\033[0m运行"
|
||||||
|
TASK5_HOUR_INPUT2="想在每日的具体哪个小时执行?(0~23)"
|
||||||
|
TASK5_MIN_INPUT="想在具体哪分钟执行?(0~59的整数)"
|
||||||
|
TASK5_CRON_DAY="在每日的"
|
||||||
|
TASK5_POINT="点"
|
||||||
|
TASK5_MINUTE="分"
|
||||||
|
TASK5_EVERY_HOUR_INPUT="想每隔多少小时执行一次?(1~23的整数)"
|
||||||
|
TASK5_EVERY="每隔"
|
||||||
|
TASK5_HOUR="小时"
|
||||||
|
TASK5_EVERY_MIN_INPUT="想每隔多少分钟执行一次?(1~59的整数)"
|
||||||
|
TASK5_MIN="分钟"
|
||||||
|
TASK5_BFSTART="服务启动前"
|
||||||
|
TASK5_AFSTART="服务启动后"
|
||||||
|
TASK5_RUNNING_HINT1="输入10即每隔10分钟运行一次,1440即每隔24小时运行一次"
|
||||||
|
TASK5_RUNNING_HINT2="大于60分钟的数值将按小时取整,且按当前时区记时"
|
||||||
|
TASK5_RUNNING_INPUT="想每隔多少分钟执行一次?(1~1440的整数)"
|
||||||
|
TASK5_RUNNING_PREFIX="运行时每"
|
||||||
|
TASK5_AFFW_HINT="该功能会将相关启动代码注入到/etc/init.d/firewall中"
|
||||||
|
TASK5_CONFIRM_CONTINUE="是否确认继续?"
|
||||||
|
TASK5_AFFW_PREFIX="防火墙重启后"
|
||||||
|
TASK5_GUARD_WORD="守护"
|
||||||
|
TASK5_OLD_PREFIX="旧版任务-"
|
||||||
|
TASK5_NONE_TO_MANAGE="当前没有可供管理的任务!"
|
||||||
|
TASK5_ADDED_TASKS="已添加的任务:"
|
||||||
|
TASK5_CLEAR_OLD="清空旧版任务"
|
||||||
|
TASK5_CLEAR_ALL="清空任务列表"
|
||||||
|
TASK5_OLD_CLEARED="旧版任务已清空!"
|
||||||
|
TASK5_ALL_CLEARED="全部任务已清空!"
|
||||||
|
TASK5_OLD_NOT_SUPPORT="旧版任务不支持管理,是否移除?"
|
||||||
|
TASK5_NO_BACK="否,返回上级菜单"
|
||||||
|
TASK5_CURRENT_TASK="当前任务为:"
|
||||||
|
TASK5_EDIT_TASK="\033[33m修改\033[0m当前任务"
|
||||||
|
TASK5_DEL_TASK="\033[31m删除\033[0m当前任务"
|
||||||
|
TASK5_RUN_ONCE="\033[32m立即执行\033[0m一次"
|
||||||
|
TASK5_VIEW_RECORD="查看\033[33m执行记录\033[0m"
|
||||||
|
TASK5_RUN_OK="执行成功!"
|
||||||
|
TASK5_RUN_FAIL="执行失败!"
|
||||||
|
TASK5_RECORD_NOT_FOUND="未找到相关执行记录!"
|
||||||
|
TASK5_USER_FILE_HEADER="#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)"
|
||||||
|
TASK5_MENU_TITLE="自动任务菜单"
|
||||||
|
TASK5_MENU_1="添加\033[32m自动任务\033[0m"
|
||||||
|
TASK5_MENU_2="管理\033[33m任务列表\033[0m"
|
||||||
|
TASK5_MENU_3="查看\033[36m任务日志\033[0m"
|
||||||
|
TASK5_MENU_4="配置\033[36m日志推送\033[0m"
|
||||||
|
TASK5_MENU_5="添加\033[33m自定义任务\033[0m"
|
||||||
|
TASK5_MENU_6="删除\033[33m自定义任务\033[0m"
|
||||||
|
TASK5_MENU_7="使用\033[32m推荐设置\033[0m"
|
||||||
|
TASK5_TASK_GREP="任务【"
|
||||||
|
TASK5_LOG_NOT_FOUND="未找到任务相关执行日志!"
|
||||||
|
TASK5_PUSH_HINT="请在日志工具中配置相关推送通道及推送开关"
|
||||||
|
|||||||
67
scripts/lang/chs/6_core_config.lang
Normal file
67
scripts/lang/chs/6_core_config.lang
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
CORECFG_TITLE="配置文件管理"
|
||||||
|
CORECFG_HINT_SELECT_PROVIDER="输入数字可管理对应提供者"
|
||||||
|
CORECFG_MENU_A="\033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)"
|
||||||
|
CORECFG_MENU_B="\033[36m本地生成配置文件\033[0m"
|
||||||
|
CORECFG_MENU_C="\033[33m在线生成配置文件\033[0m"
|
||||||
|
CORECFG_MENU_D="\033[31m清空提供者列表\033[0m"
|
||||||
|
CORECFG_MENU_E="\033[36m自定义配置文件\033[0m"
|
||||||
|
CORECFG_CORE_ONLY="仅限Mihomo/singboxr内核使用,请更换内核!"
|
||||||
|
CORECFG_ADD_PROVIDER_FIRST="请先添加提供者!"
|
||||||
|
CORECFG_CLEAR_WARN="警告:这将删除所有提供者且无法还原!"
|
||||||
|
CORECFG_CLEAR_CONFIRM="是否确认清空提供者列表:"
|
||||||
|
CORECFG_YES="是"
|
||||||
|
CORECFG_NO="否"
|
||||||
|
CORECFG_NO_BACK="否,返回上级菜单"
|
||||||
|
CORECFG_INPUT_ALNUM="请输入对应字母或数字"
|
||||||
|
CORECFG_INPUT="请输入"
|
||||||
|
CORECFG_FILL_REQUIRED="请先完成必填选项!"
|
||||||
|
CORECFG_START_APPLY="是否启动服务以使配置文件生效:"
|
||||||
|
CORECFG_PROVIDER_SUPPORT="支持添加订阅链接/分享链接/本地文件作为提供者"
|
||||||
|
CORECFG_SET_NAME="设置\033[36m名称或代号\033[0m\t"
|
||||||
|
CORECFG_SET_LINK="设置\033[32m链接或路径\033[0m:\t"
|
||||||
|
CORECFG_SET_OVERRIDE="设置\033[33m本地生成覆写\033[0m"
|
||||||
|
CORECFG_SAVE_PROVIDER="\033[36m保存此提供者\033[0m"
|
||||||
|
CORECFG_DEL_PROVIDER="\033[31m删除此提供者\033[0m"
|
||||||
|
CORECFG_MORE_CONFIG_HINT="以下方式的详细配置请前往对应功能页面进行设置!"
|
||||||
|
CORECFG_GEN_LOCAL_ONE="\033[32m本地生成\033[0m仅包含此提供者的配置文件"
|
||||||
|
CORECFG_GEN_ONLINE_ONE="\033[33m在线生成\033[0m仅包含此提供者的配置文件"
|
||||||
|
CORECFG_GET_ONLINE_DIRECT="在线获取此配置文件(不使用订阅转换)"
|
||||||
|
CORECFG_USE_DIRECT="直接使用此文件作为配置文件(不使用本地生成)"
|
||||||
|
CORECFG_NAME_HINT="注意:\n名称或代号不可重复,不支持纯数字,且不要超过4个汉字!"
|
||||||
|
CORECFG_INPUT_NAME="请直接输入具体名称或代号"
|
||||||
|
CORECFG_OR_BACK="或输入 0 返回上级菜单"
|
||||||
|
CORECFG_LINK_HINT1="\033[33m订阅链接\033[0m:\nhttps/http开头的clash配置文件订阅链接"
|
||||||
|
CORECFG_LINK_HINT2="\033[36m分享链接\033[0m:"
|
||||||
|
CORECFG_LINK_HINT3="\033[33m本地文件\033[0m:\n必须放在"
|
||||||
|
CORECFG_LINK_HINT4="目录下"
|
||||||
|
CORECFG_LINK_HINT5="\033[36mBase64 \033[0m:\n请直接写入本地文件"
|
||||||
|
CORECFG_INPUT0_BACK="输入 0 返回上级菜单"
|
||||||
|
CORECFG_SELECT_FILE_OR_LINK="请选择对应文件或输入具体链接"
|
||||||
|
CORECFG_INPUT_LINK="请直接输入具体链接"
|
||||||
|
CORECFG_DANGER1="注意:\n此功能不兼容“跳过证书验证”功能"
|
||||||
|
CORECFG_DANGER2="请确认你完全理解自己在做什么"
|
||||||
|
CORECFG_DANGER_CONFIRM="我确认遇到问题可以自行解决"
|
||||||
|
CORECFG_INTERVAL1="设置\033[33m健康检查间隔\033[0m:\t"
|
||||||
|
CORECFG_INTERVAL2="设置\033[36m自动更新间隔\033[0m:\t"
|
||||||
|
CORECFG_MIN="分钟"
|
||||||
|
CORECFG_HOUR="小时"
|
||||||
|
CORECFG_SET_UA="设置\033[33m虚拟浏览器UA\033[0m:\t"
|
||||||
|
CORECFG_SET_EXCLUDE="设置\033[31m排除节点正则\033[0m:\t"
|
||||||
|
CORECFG_SET_INCLUDE="设置\033[32m包含节点正则\033[0m:\t"
|
||||||
|
CORECFG_CUR_INTERVAL="当前健康检查间隔:"
|
||||||
|
CORECFG_INPUT_INTERVAL1="请直接健康检查间隔(单位:分钟)"
|
||||||
|
CORECFG_RESET_INTERVAL1="或输入 r 重置健康检查间隔为默认值(3 分钟)"
|
||||||
|
CORECFG_INPUT_INTERVAL2="请直接输入自动更新间隔(单位:小时)"
|
||||||
|
CORECFG_RESET_INTERVAL2="或输入 r 重置自动更新间隔为默认值(12 小时)"
|
||||||
|
CORECFG_CUR_UA_NONE="当前浏览器UA:无"
|
||||||
|
CORECFG_CUR_UA="当前浏览器UA:"
|
||||||
|
CORECFG_INPUT_UA="请直接输入浏览器UA"
|
||||||
|
CORECFG_RESET_UA="或输入 r 重置浏览器UA为默认值(clash.meta)"
|
||||||
|
CORECFG_CUR_EXCLUDE_NONE="当前排除规则:无"
|
||||||
|
CORECFG_CUR_EXCLUDE="当前排除规则:"
|
||||||
|
CORECFG_INPUT_EXCLUDE="请直接输入需要排除的节点关键字(支持正则,不支持空格)"
|
||||||
|
CORECFG_CLEAR_EXCLUDE="或输入 c 清空排除规则"
|
||||||
|
CORECFG_CUR_INCLUDE_NONE="当前包含规则:无"
|
||||||
|
CORECFG_CUR_INCLUDE="当前包含规则:"
|
||||||
|
CORECFG_INPUT_INCLUDE="请直接输入需要包含的节点关键字(支持正则,不支持空格)"
|
||||||
|
CORECFG_CLEAR_INCLUDE="或输入 c 清空包含规则"
|
||||||
16
scripts/lang/chs/7_gateway.lang
Normal file
16
scripts/lang/chs/7_gateway.lang
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
GW_TITLE="访问与控制菜单"
|
||||||
|
GW_WARN="注意:"
|
||||||
|
GW_FW_VPS_HINT="如在vps运行,还需在vps安全策略对相关端口同时放行"
|
||||||
|
GW_FW_PORT_LIMIT="最多支持设置放行10个端口,请先减少一些!"
|
||||||
|
GW_INPUT_ALLOW_PORT="请输入要放行的端口号"
|
||||||
|
GW_OK="操作成功"
|
||||||
|
GW_CORE_UNSUPPORTED="内核暂不支持此功能,请先更换内核!"
|
||||||
|
GW_TG_DONE_PREFIX="已完成Telegram机器人设置!请使用"
|
||||||
|
GW_TG_DONE_SUFFIX="呼出功能菜单!"
|
||||||
|
GW_SET="已设置"
|
||||||
|
GW_BOUND="已绑定"
|
||||||
|
GW_INPUT_PORT_DEL0="请输入端口号(输入0删除)"
|
||||||
|
GW_INPUT_WSPATH="请输入ws-path路径(输入0删除)"
|
||||||
|
GW_INPUT_UUID="请输入UUID(输入0删除)"
|
||||||
|
GW_INPUT_HOST="请输入本机公网IP(4/6)或域名"
|
||||||
|
GW_SHARE_LINK_HINT="你的分享链接是(请勿随意分享给他人):"
|
||||||
11
scripts/lang/chs/8_tools.lang
Normal file
11
scripts/lang/chs/8_tools.lang
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
TOOLS_TITLE="工具与优化"
|
||||||
|
TOOLS_SSH_DISABLE="禁止"
|
||||||
|
TOOLS_SSH_ENABLE="开启"
|
||||||
|
TOOLS_ERR_PORT="输入错误!请输入正确的数值(1000-65535)!"
|
||||||
|
TOOLS_ERR_PORT_OCCUPIED="当前端口已被其他进程占用,请重新输入!"
|
||||||
|
TOOLS_SSH_SET_OK="设置成功,请重新开启外网访问SSH功能!"
|
||||||
|
TOOLS_SSH_ENABLED="已开启外网访问SSH功能!"
|
||||||
|
TOOLS_SSH_DISABLED="已禁止外网访问SSH!"
|
||||||
|
TOOLS_DISABLE="禁用"
|
||||||
|
TOOLS_ENABLE="启用"
|
||||||
|
TOOLS_CONFIGURED="已配置"
|
||||||
49
scripts/lang/chs/9_upgrade.lang
Normal file
49
scripts/lang/chs/9_upgrade.lang
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
UPG_ERR_TRY_OTHER_SOURCE="请尝试切换至其他安装源后重新下载!"
|
||||||
|
UPG_ERR_LOCAL_INSTALL="或者参考 \033[32;4mhttps://juewuy.github.io/bdaz\033[0m 进行本地安装!"
|
||||||
|
UPG_TITLE="更新与支持"
|
||||||
|
UPG_CUR_DIR_SPACE="当前目录"
|
||||||
|
UPG_LOW_SPACE_HINT="当前目录剩余空间较低,建议开启小闪存模式!"
|
||||||
|
UPG_MENU_SCRIPT="更新"
|
||||||
|
UPG_MENU_SCRIPT_NAME="管理脚本"
|
||||||
|
UPG_MENU_CORE="切换/更新"
|
||||||
|
UPG_MENU_CORE_NAME="内核文件"
|
||||||
|
UPG_MENU_GEO="安装/更新本地"
|
||||||
|
UPG_MENU_GEO_NAME="数据库文件"
|
||||||
|
UPG_MENU_DB="安装/更新本地"
|
||||||
|
UPG_MENU_DB_NAME="Dashboard面板"
|
||||||
|
UPG_MENU_CRT="安装/更新本地"
|
||||||
|
UPG_MENU_CRT_NAME="根证书文件"
|
||||||
|
UPG_MENU_PAC="自动代理查看"
|
||||||
|
UPG_MENU_SOURCE="切换"
|
||||||
|
UPG_MENU_SOURCE_NAME="安装源及版本分支"
|
||||||
|
UPG_MENU_UNINSTALL="卸载ShellCrash"
|
||||||
|
UPG_MENU_THANKS="感谢列表!"
|
||||||
|
UPG_PAC_LINK="PAC配置链接为:"
|
||||||
|
UPG_PAC_GUIDE="PAC的使用教程请参考:"
|
||||||
|
UPG_THANKS_TITLE="感谢以下项目及其开发者们的无私奉献!"
|
||||||
|
UPG_THANKS_SPECIAL="特别感谢:\033[36m所有帮助及赞助过此项目的同仁们!\033[0m"
|
||||||
|
UPG_CHECKING="正在检查更新......"
|
||||||
|
UPG_CHECK_OK="检查更新成功"
|
||||||
|
UPG_CHECK_FAIL="检查更新失败!请尝试切换其他安装源!"
|
||||||
|
UPG_DOWNLOAD_FAIL="文件下载失败!"
|
||||||
|
UPG_EXTRACTING="开始解压文件......"
|
||||||
|
UPG_EXTRACT_FAIL="文件解压失败!"
|
||||||
|
UPG_SCRIPT_OK="脚本更新成功!"
|
||||||
|
UPG_SCRIPT_WARN="注意:更新时会停止服务!"
|
||||||
|
UPG_SCRIPT_CUR_VER="当前脚本版本为:"
|
||||||
|
UPG_SCRIPT_NEW_VER="最新脚本版本为:"
|
||||||
|
UPG_UPDATE_NOW="立即更新"
|
||||||
|
UPG_SCRIPT_MGR_OK="管理脚本更新成功!"
|
||||||
|
UPG_CPUCORE_HINT1="仅适合脚本无法正确识别核心或核心无法正常运行时使用!"
|
||||||
|
UPG_CPUCORE_HINT2="不知道如何获取核心版本?"
|
||||||
|
UPG_CPUCORE_HINT3="请参考:"
|
||||||
|
UPG_CPUCORE_LIST="当前可供在线下载的处理器架构为:"
|
||||||
|
UPG_CPUCORE_ERR="请输入正确的处理器架构!"
|
||||||
|
UPG_CORETYPE_CONFIRM="请确认该自定义内核的类型:"
|
||||||
|
UPG_CORE_SWITCH_PREFIX="已从"
|
||||||
|
UPG_CORE_SWITCH_MID="内核切换至"
|
||||||
|
UPG_CORE_SWITCH_SUFFIX="内核"
|
||||||
|
UPG_CORE_SWITCH_WARN="二者Geo数据库及yaml/json配置文件不通用"
|
||||||
|
UPG_CORE_SWITCH_KEEP="是否保留相关数据库文件?"
|
||||||
|
UPG_KEEP="保留"
|
||||||
|
UPG_NOT_KEEP="不保留"
|
||||||
68
scripts/lang/chs/bot_tg.lang
Normal file
68
scripts/lang/chs/bot_tg.lang
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
BOT_TG_PRIVATE_HINT="请先通过 \033[32;4mhttps://t.me/BotFather\033[0m 申请TG机器人并获取其\033[36mAPI TOKEN\033[0m"
|
||||||
|
BOT_TG_INPUT_TOKEN="请输入你获取到的API TOKEN"
|
||||||
|
BOT_TG_PRIVATE_TOP="请向\033[32m你申请的机器人\033[33m而不是BotFather!\033[0m"
|
||||||
|
BOT_TG_PUBLIC_HINT="请向机器人:\033[32;4mhttps://t.me/ShellCrashtg_bot\033[0m"
|
||||||
|
BOT_TG_SET_DONE="已完成Telegram日志推送设置!"
|
||||||
|
BOT_TG_CHATID_RETRY_PREFIX="第"
|
||||||
|
BOT_TG_CHATID_RETRY_SUFFIX="次尝试获取对话ID失败,正在重试..."
|
||||||
|
BOT_TG_SEND_KEY="发送此秘钥:"
|
||||||
|
BOT_TG_SENT_CONFIRM="我已经发送完成"
|
||||||
|
BOT_TG_CHATID_FAIL="无法获取对话ID,请返回重新设置或手动输入ChatID!"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT="通常访问"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT2="即可看到ChatID"
|
||||||
|
BOT_TG_INPUT_CHATID="请手动输入ChatID"
|
||||||
|
BOT_TG_CHATID_RECONFIG="无法获取对话ID,请重新配置!"
|
||||||
|
BOT_TG_CRON_NAME="TG_BOT守护进程"
|
||||||
|
|
||||||
|
BOT_TG_HELP_GROUP="进群讨论:"
|
||||||
|
BOT_TG_HELP_PROJECT="项目地址:"
|
||||||
|
BOT_TG_HELP_GUIDE="相关教程:"
|
||||||
|
BOT_TG_HELP_COFFEE="请喝咖啡:"
|
||||||
|
BOT_TG_HELP_AIRPORT="友情机场:"
|
||||||
|
BOT_TG_RUN_ON="🟢正在运行"
|
||||||
|
BOT_TG_RUN_OFF="🟡未运行"
|
||||||
|
BOT_TG_WELCOME="欢迎使用ShellCrash!"
|
||||||
|
BOT_TG_SERVICE="服务"
|
||||||
|
BOT_TG_MEM_USED="内存占用:"
|
||||||
|
BOT_TG_RUNNING_TIME="已运行:"
|
||||||
|
BOT_TG_SELECT_ACTION="请选择操作:"
|
||||||
|
BOT_TG_SELECT_FILE="请选择需要上传或下载的具体文件:"
|
||||||
|
BOT_TG_BTN_START="✈️ 启用劫持"
|
||||||
|
BOT_TG_BTN_PURE="💧 纯净模式"
|
||||||
|
BOT_TG_BTN_RESTART="🕹 重启服务"
|
||||||
|
BOT_TG_BTN_LOG="📄 查看日志"
|
||||||
|
BOT_TG_BTN_TRANSFER="🔃 文件传输"
|
||||||
|
BOT_TG_BTN_GET_LOG="📥 下载日志"
|
||||||
|
BOT_TG_BTN_GET_BAK="💾 备份设置"
|
||||||
|
BOT_TG_BTN_GET_CFG="⬇️ 下载配置"
|
||||||
|
BOT_TG_BTN_UP_CORE="🪐 上传内核"
|
||||||
|
BOT_TG_BTN_UP_BAK="🔄 还原设置"
|
||||||
|
BOT_TG_BTN_UP_CFG="⬆️ 上传配置"
|
||||||
|
BOT_TG_NO_CURL="⚠️ 因当前设备缺少curl应用,仅支持上传功能!"
|
||||||
|
BOT_TG_UPLOAD_OK="成功!即将重启服务!"
|
||||||
|
BOT_TG_UPLOAD_FAIL="失败,请仔细检查文件或重试!"
|
||||||
|
BOT_TG_CORE_UPDATE="内核更新"
|
||||||
|
BOT_TG_CFG_RESTORED="配置文件已还原,请手动重启服务!"
|
||||||
|
BOT_TG_RESTORE_FAIL="解压还原失败,请仔细检查文件或重试!"
|
||||||
|
BOT_TG_CFG_UPLOADED="配置文件已上传,请手动重启服务!"
|
||||||
|
BOT_TG_UPLOAD_FAIL2="上传失败,请仔细检查文件或重试!"
|
||||||
|
BOT_TG_NET_UPLOAD_FAIL="网络错误,上传失败!请重试!"
|
||||||
|
BOT_TG_FILE_FORMAT_FAIL="文件格式不匹配,上传失败!"
|
||||||
|
BOT_TG_FW_ENABLED="ShellCrash 透明路由"
|
||||||
|
BOT_TG_FW_ENABLED_SUFFIX="已启用!"
|
||||||
|
BOT_TG_SWITCH_PURE="已切换到纯净模式!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED="ShellCrash 服务已重启!"
|
||||||
|
BOT_TG_UNFINISHED="错误,还未完成的功能!"
|
||||||
|
BOT_TG_SEND_CORE="请发送需要上传的内核,必须是以tar.gz,.gz或.upx结尾的【"
|
||||||
|
BOT_TG_SEND_CORE_SUFFIX="】内核!"
|
||||||
|
BOT_TG_SEND_BAK="请发送需要还原的备份文件,必须是【.tar.gz】格式!"
|
||||||
|
BOT_TG_SEND_CFG="请发送需要上传的配置文件,必须是【"
|
||||||
|
BOT_TG_SEND_CFG_SUFFIX="】格式,支持自定义配置文件"
|
||||||
|
BOT_TG_SWITCH_TO="已切换到"
|
||||||
|
BOT_TG_ALREADY="当前已经是"
|
||||||
|
BOT_TG_ALREADY_PURE="当前已经是纯净模式!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED_SHORT="🔄 服务已重启"
|
||||||
|
BOT_TG_LOG_CONTENT="📄 日志内容如下(已过滤任务日志):"
|
||||||
|
BOT_TG_TASK_WORD="任务"
|
||||||
|
BOT_TG_INPUT_SUB="✏ 请输入新的订阅链接:"
|
||||||
|
BOT_TG_SUB_UPDATED="订阅更新完成:"
|
||||||
3
scripts/lang/chs/check_port.lang
Normal file
3
scripts/lang/chs/check_port.lang
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
CHECK_PORT_RANGE_ERR="输入错误!请输入正确的数值(1-65535)!"
|
||||||
|
CHECK_PORT_DUP_ERR="输入错误!请不要输入重复的端口!"
|
||||||
|
CHECK_PORT_OCCUPIED_ERR="当前端口已被其他进程占用,请重新输入!"
|
||||||
35
scripts/lang/chs/ddns.lang
Normal file
35
scripts/lang/chs/ddns.lang
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
DDNS_WELCOME="欢迎使用DDNS!"
|
||||||
|
DDNS_ADD_DONE="服务已经添加!"
|
||||||
|
DDNS_INPUT_DOMAIN="请输入你的域名"
|
||||||
|
DDNS_INPUT_USER="请输入用户名或邮箱"
|
||||||
|
DDNS_INPUT_PASS="请输入密码或令牌秘钥"
|
||||||
|
DDNS_INPUT_CHECK_INTERVAL="请输入检测更新间隔(单位:分钟;默认为10)"
|
||||||
|
DDNS_INPUT_FORCE_INTERVAL="请输入强制更新间隔(单位:小时;默认为24)"
|
||||||
|
DDNS_CONFIRM_INFO="请核对如下信息:"
|
||||||
|
DDNS_FIELD_SERVICE="服务商:"
|
||||||
|
DDNS_FIELD_DOMAIN="域名:"
|
||||||
|
DDNS_FIELD_USER="用户名:"
|
||||||
|
DDNS_FIELD_INTERVAL="检测间隔:"
|
||||||
|
DDNS_CONFIRM_ADD="是否确认添加:"
|
||||||
|
DDNS_YES="是"
|
||||||
|
DDNS_REINPUT="否,重新輸入"
|
||||||
|
DDNS_LIST_NOT_FOUND="未找到DDNS列表文件,尝试在线获取……"
|
||||||
|
DDNS_DOWNLOAD_FAILED="下载失败,请重试!"
|
||||||
|
DDNS_SELECT_PROVIDER="请选择服务提供商:"
|
||||||
|
DDNS_INPUT_ERROR="输入错误,请重新输入!"
|
||||||
|
DDNS_SELECT_NETMODE="请选择网络模式:"
|
||||||
|
DDNS_IPV4="IPV4"
|
||||||
|
DDNS_IPV6="IPV6"
|
||||||
|
DDNS_DISABLE="停用"
|
||||||
|
DDNS_ENABLE="启用"
|
||||||
|
DDNS_UPDATE_NOW="立即更新"
|
||||||
|
DDNS_EDIT_CURRENT="编辑当前服务"
|
||||||
|
DDNS_CURRENT_SERVICE="当前服务"
|
||||||
|
DDNS_REMOVE_CURRENT="移除当前服务"
|
||||||
|
DDNS_VIEW_LOG="查看运行日志"
|
||||||
|
DDNS_NOT_SUPPORTED="本脚本依赖OpenWrt内置的DDNS服务,当前设备无法运行,已退出!"
|
||||||
|
DDNS_LIST_HEADER=" 列表 域名 启用 IP地址"
|
||||||
|
DDNS_ADD_SERVICE="添加DDNS服务"
|
||||||
|
DDNS_EXIT="退出"
|
||||||
|
DDNS_INPUT_INDEX="请输入对应序号"
|
||||||
|
DDNS_INPUT_NUM_ERROR="请输入正确数字!"
|
||||||
@@ -50,3 +50,34 @@ DNS_IPV6_NOT_SUPPORT="该选项暂不支持IPv6加密DNS!"
|
|||||||
|
|
||||||
DNS_ENCRYPT_OK="已设置加密DNS,如遇DNS解析问题,请重置DNS配置!"
|
DNS_ENCRYPT_OK="已设置加密DNS,如遇DNS解析问题,请重置DNS配置!"
|
||||||
DNS_CORE_REQUIRE="请使用Mihomo或SingBox内核"
|
DNS_CORE_REQUIRE="请使用Mihomo或SingBox内核"
|
||||||
|
DNS_SET_TO="设为"
|
||||||
|
DNS_PROTECT_NOW="当前"
|
||||||
|
DNS_HOSTS_NOW="当前"
|
||||||
|
DNS_ENABLED="已启用"
|
||||||
|
DNS_DISABLED="已禁用"
|
||||||
|
DNS_PROTECT_DISABLE_Q="DNS防泄漏,是否确认禁用?"
|
||||||
|
DNS_PROTECT_ENABLE_Q="DNS防泄漏,是否确认启用?"
|
||||||
|
DNS_HOSTS_DISABLE_Q="Hosts优化,是否确认禁用?"
|
||||||
|
DNS_HOSTS_ENABLE_Q="Hosts优化,是否确认启用?"
|
||||||
|
DNS_YES="是"
|
||||||
|
DNS_RESET_DEFAULT="重置为默认值"
|
||||||
|
DNS_NO_BACK="否,返回上级菜单"
|
||||||
|
DNS_REMOVE_OK="移除成功"
|
||||||
|
DNS_REMOVE_FAIL="移除失败"
|
||||||
|
DNS_INPUT_REDIR_PORT="请直接输入旁路由IPV4地址"
|
||||||
|
DNS_INPUT_REDIR_RESET="或输入 r 重置DNS劫持端口"
|
||||||
|
DNS_INPUT_REDIR_BACK="或输入 0 返回上级菜单"
|
||||||
|
DNS_INPUT="请输入"
|
||||||
|
DNS_CONFIRM_ADD="请确认需要添加的地址:"
|
||||||
|
DNS_CONFIRM_OK="确认无误"
|
||||||
|
DNS_ADD_OK="添加成功"
|
||||||
|
DNS_ADD_FAIL="添加失败"
|
||||||
|
DNS_DIRECT_NOW="当前DIRECT-DNS:"
|
||||||
|
DNS_PROXY_NOW="当前PROXY-DNS:"
|
||||||
|
DNS_DEFAULT_NOW="当前DEFAULT-DNS:"
|
||||||
|
DNS_INPUT_DIRECT_NEW="请直接输入新的DIRECT-DNS地址"
|
||||||
|
DNS_INPUT_DIRECT_RESET="或输入 r 重置DIRECT-DNS地址"
|
||||||
|
DNS_INPUT_PROXY_NEW="请直接输入新的PROXY-DNS地址"
|
||||||
|
DNS_INPUT_PROXY_RESET="或输入 r 重置PROXY-DNS地址"
|
||||||
|
DNS_INPUT_DEFAULT_NEW="请直接输入新的DEFAULT-DNS地址"
|
||||||
|
DNS_INPUT_DEFAULT_RESET="或输入 r 重置DEFAULT-DNS地址"
|
||||||
|
|||||||
25
scripts/lang/chs/providers.lang
Normal file
25
scripts/lang/chs/providers.lang
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
PROVIDERS_MENU_GEN="生成包含全部提供者的配置文件"
|
||||||
|
PROVIDERS_MENU_TEMPLATE="选择\033[33m规则模版\033[0m"
|
||||||
|
PROVIDERS_MENU_CLEAN="\033[33m清理\033[0mproviders目录文件"
|
||||||
|
PROVIDERS_INPUT="请输入对应字母或数字"
|
||||||
|
|
||||||
|
PROVIDERS_EMPTY_HINT="你还未添加链接或本地配置文件,请先添加!"
|
||||||
|
PROVIDERS_TEMPLATE_CURRENT="当前规则模版为:"
|
||||||
|
PROVIDERS_TEMPLATE_SELECT="请选择在线模版:"
|
||||||
|
PROVIDERS_TEMPLATE_LOCAL="使用\033[36m本地模版\033[0m"
|
||||||
|
PROVIDERS_TEMPLATE_PATH="请输入模版的路径(绝对路径)"
|
||||||
|
PROVIDERS_TEMPLATE_NOT_FOUND="输入错误,找不到对应模版文件!"
|
||||||
|
|
||||||
|
PROVIDERS_CLEAN_WARN="将清空"
|
||||||
|
PROVIDERS_CLEAN_WARN_END="目录下所有内容"
|
||||||
|
PROVIDERS_CLEAN_CONFIRM="是否继续?"
|
||||||
|
|
||||||
|
PROVIDERS_FETCHING_TEMPLATE="正在获取在线模版......"
|
||||||
|
PROVIDERS_DOWNLOAD_FAILED="下载失败,请尝试更换安装源!"
|
||||||
|
PROVIDERS_GEN_OK="配置文件生成成功!"
|
||||||
|
PROVIDERS_GEN_OK_SINGBOX="配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!"
|
||||||
|
PROVIDERS_GEN_FAILED="生成配置文件出错,请仔细检查输入!"
|
||||||
|
PROVIDERS_RESTART_ASK="是否立即启动/重启服务?"
|
||||||
|
PROVIDERS_YES="是"
|
||||||
|
PROVIDERS_NO="否"
|
||||||
|
PROVIDERS_CRON_SUB_UPDATE="更新订阅"
|
||||||
34
scripts/lang/chs/set_crashdir.lang
Normal file
34
scripts/lang/chs/set_crashdir.lang
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
SCD_SELECT_INSTALL_DIR="请选择安装目录:"
|
||||||
|
SCD_INPUT_NUM="请输入相应数字"
|
||||||
|
SCD_INPUT_ERROR="输入错误!请重新设置!"
|
||||||
|
SCD_XIAOMI_DETECTED="检测到当前设备为小米官方系统,请选择安装位置:"
|
||||||
|
SCD_CUSTOM_DIR_WARN="自定义目录(不推荐,不明勿用!)"
|
||||||
|
SCD_EXIT_INSTALL="退出安装"
|
||||||
|
SCD_SELECT_USB_DIR="请选择U盘目录:"
|
||||||
|
SCD_ASUS_DM_NOT_FOUND="未找到下载大师自启文件:"
|
||||||
|
SCD_CHECK_SETTING="请检查设置!"
|
||||||
|
SCD_ASUS_DETECTED="检测到当前设备为华硕固件,请选择安装方式"
|
||||||
|
SCD_ASUS_INSTALL_DM="基于U盘+下载大师安装(支持所有固件,限ARM设备,须插入U盘或移动硬盘)"
|
||||||
|
SCD_ASUS_INSTALL_SCRIPT="基于自启脚本安装(仅持部分梅林固件)"
|
||||||
|
SCD_ASUS_DM_HINT="请先在路由器网页后台安装下载大师并启用,之后选择外置存储所在目录!"
|
||||||
|
SCD_ASUS_REINSTALL_HINT="如开机无法正常自启,请重新使用U盘+下载大师安装!"
|
||||||
|
SCD_PATH_FORMAT_HINT="路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!"
|
||||||
|
SCD_PATH_FREE_SPACE="可用路径 剩余空间:"
|
||||||
|
SCD_INPUT_CUSTOM_DIR="请输入自定义路径"
|
||||||
|
SCD_PATH_ERROR="路径错误!请重新设置!"
|
||||||
|
SCD_INSTALL_SPACE_HINT="注意:安装ShellCrash至少需要预留约1MB的磁盘空间"
|
||||||
|
SCD_INSTALL_ETC="在\033[32m/etc目录\033[0m下安装(适合root用户)"
|
||||||
|
SCD_INSTALL_USR="在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)"
|
||||||
|
SCD_INSTALL_HOME="在\033[32m当前用户目录\033[0m下安装(适合非root用户)"
|
||||||
|
SCD_INSTALL_USB="在\033[32m外置存储\033[0m中安装"
|
||||||
|
SCD_INSTALL_MANUAL="手动设置安装目录"
|
||||||
|
SCD_INSTALL_CANCELED="安装已取消"
|
||||||
|
SCD_NO_WRITE_PREFIX="没有"
|
||||||
|
SCD_NO_WRITE_SUFFIX="目录写入权限!请重新设置!"
|
||||||
|
SCD_TARGET_DIR_PREFIX="目标目录"
|
||||||
|
SCD_TARGET_DIR_SPACE="空间剩余:"
|
||||||
|
SCD_CONFIRM_INSTALL="是否确认安装?"
|
||||||
|
SCD_YES="是"
|
||||||
|
SCD_NO="否"
|
||||||
|
SCD_DIR_FREE="目录,剩余空间:"
|
||||||
|
SCD_SOFT_SOLID="(支持软固化功能)"
|
||||||
52
scripts/lang/chs/setboot.lang
Normal file
52
scripts/lang/chs/setboot.lang
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
SETBOOT_NOT_SET="未设置"
|
||||||
|
SETBOOT_SECOND="秒"
|
||||||
|
SETBOOT_TITLE="启动设置菜单"
|
||||||
|
SETBOOT_ITEM_AUTO="开机自启动:"
|
||||||
|
SETBOOT_ITEM_OLD="使用保守模式:"
|
||||||
|
SETBOOT_ITEM_OLD_DESC="———基于定时任务(每分钟检测)"
|
||||||
|
SETBOOT_ITEM_DELAY="设置自启延时:"
|
||||||
|
SETBOOT_ITEM_DELAY_DESC="———用于解决自启后服务受限"
|
||||||
|
SETBOOT_ITEM_MINI="启用小闪存模式:"
|
||||||
|
SETBOOT_ITEM_MINI_DESC="———用于闪存空间不足的设备"
|
||||||
|
SETBOOT_ITEM_MINI_DIR="设置小闪存目录:"
|
||||||
|
SETBOOT_ITEM_NETCHK="自启网络检查:"
|
||||||
|
SETBOOT_ITEM_NETCHK_DESC="———禁用则跳过自启时网络检查"
|
||||||
|
SETBOOT_VIEW_LOG="查看启动日志"
|
||||||
|
SETBOOT_AUTO_OFF="已禁止ShellCrash开机自启动!"
|
||||||
|
SETBOOT_AUTO_ON="已设置ShellCrash开机自启动!"
|
||||||
|
SETBOOT_CRON_INIT="ShellCrash初始化"
|
||||||
|
SETBOOT_OLDMODE_ON="改为使用保守模式启动服务!"
|
||||||
|
SETBOOT_OLDMODE_OFF="改为使用系统守护进程启动服务!"
|
||||||
|
SETBOOT_MODE_UNSUPPORTED="当前设备不支持以其他模式启动!"
|
||||||
|
SETBOOT_DELAY_HINT1="如果你的设备启动后可以正常使用,则无需设置!"
|
||||||
|
SETBOOT_DELAY_HINT2="推荐设置为30~120秒之间,请根据设备问题自行试验"
|
||||||
|
SETBOOT_DELAY_INPUT="请输入启动延迟时间(0~300秒)"
|
||||||
|
SETBOOT_SET_OK="设置成功!"
|
||||||
|
SETBOOT_DELAY_INVALID="输入有误,或超过300秒,请重新输入!"
|
||||||
|
SETBOOT_MINI_NEEDED_NO="您的设备空间充足(>20M),无需开启!"
|
||||||
|
SETBOOT_SYSTEMD_WARN="不支持systemd启动模式,请先启用保守模式!"
|
||||||
|
SETBOOT_MINI_ENABLED="已经启用小闪存功能!"
|
||||||
|
SETBOOT_MINI_DIR_HINT="如需更换目录,请使用【设置小闪存目录】功能"
|
||||||
|
SETBOOT_MINI_DISABLE_WARN="您的设备剩余空间不足8M,停用后可能无法正常运行!"
|
||||||
|
SETBOOT_MINI_DISABLE_CONFIRM="是否确认停用此功能?"
|
||||||
|
SETBOOT_YES="是"
|
||||||
|
SETBOOT_NO_BACK="否,返回上级菜单"
|
||||||
|
SETBOOT_MINI_DISABLED="已经停用小闪存功能!"
|
||||||
|
SETBOOT_BINDIR_HINT1="如设置到内存,则每次开机后都自动重新下载相关文件"
|
||||||
|
SETBOOT_BINDIR_HINT2="请确保安装源可用裸连,否则会导致启动失败"
|
||||||
|
SETBOOT_BINDIR_TMP="使用内存(/tmp)"
|
||||||
|
SETBOOT_BINDIR_USB="选择U盘目录"
|
||||||
|
SETBOOT_BINDIR_CUSTOM="自定义目录"
|
||||||
|
SETBOOT_SELECT_INSTALL_DIR="请选择安装目录:"
|
||||||
|
SETBOOT_SPACE_USED="已占用的储存空间:"
|
||||||
|
SETBOOT_INPUT_ERROR="输入错误!请重新设置!"
|
||||||
|
SETBOOT_INPUT_CMD="请直接输入命令语句"
|
||||||
|
SETBOOT_INPUT_OR_BACK="或输入 0 返回上级菜单"
|
||||||
|
SETBOOT_INPUT="请输入"
|
||||||
|
SETBOOT_NETCHK_HINT1="如果你的设备启动后可以正常使用,则无需变更设置!"
|
||||||
|
SETBOOT_NETCHK_HINT2="禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!"
|
||||||
|
SETBOOT_NETCHK_HINT3="启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!"
|
||||||
|
SETBOOT_NETCHK_OFF_CONFIRM="当前\033[33m已禁用\033[0m自启网络检查,是否确认启用?"
|
||||||
|
SETBOOT_NETCHK_ON_CONFIRM="当前\033[33m已启用\033[0m自启网络检查,是否确认禁用?"
|
||||||
|
SETBOOT_TASK_WORD="任务"
|
||||||
|
SETBOOT_LOG_NOT_FOUND="未找到相关日志!"
|
||||||
33
scripts/lang/chs/subconverter.lang
Normal file
33
scripts/lang/chs/subconverter.lang
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
SUBCONVERTER_MENU_GEN="生成包含全部节点、订阅的配置文件"
|
||||||
|
SUBCONVERTER_MENU_EXCLUDE="设置\033[31m排除节点正则\033[0m"
|
||||||
|
SUBCONVERTER_MENU_INCLUDE="设置\033[32m包含节点正则\033[0m"
|
||||||
|
SUBCONVERTER_MENU_RULE="选择\033[33m在线规则模版\033[0m"
|
||||||
|
SUBCONVERTER_MENU_SERVER="选择Subconverter服务器"
|
||||||
|
SUBCONVERTER_MENU_UA="自定义浏览器UA"
|
||||||
|
|
||||||
|
SUBCONVERTER_INPUT="请输入"
|
||||||
|
SUBCONVERTER_BACK="或输入 0 返回上级菜单"
|
||||||
|
|
||||||
|
SUBCONVERTER_EXCLUDE_HINT1="匹配关键字的节点会在导入时被【屏蔽】!"
|
||||||
|
SUBCONVERTER_INCLUDE_HINT1="仅有匹配关键字的节点才会被【导入】!!!"
|
||||||
|
SUBCONVERTER_KEYWORD_SPLIT="多个关键字可以用\033[30;47m | \033[0m号分隔"
|
||||||
|
SUBCONVERTER_REGEX_HINT="\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代"
|
||||||
|
SUBCONVERTER_EXCLUDE_INPUT="请直接输入节点过滤关键字"
|
||||||
|
SUBCONVERTER_INCLUDE_INPUT="请直接输入节点匹配关键字"
|
||||||
|
SUBCONVERTER_EXCLUDE_CLEAR="或输入 d \033[31m清空\033[0m节点过滤关键字"
|
||||||
|
SUBCONVERTER_INCLUDE_CLEAR="或输入 d \033[31m清空\033[0m节点匹配关键字"
|
||||||
|
|
||||||
|
SUBCONVERTER_RULE_CURRENT="当前使用规则为:"
|
||||||
|
SUBCONVERTER_SERVER_HINT="以下为互联网采集的第三方服务器,具体安全性请自行斟酌!"
|
||||||
|
SUBCONVERTER_SERVER_THANKS="感谢以下作者的无私奉献!!!"
|
||||||
|
SUBCONVERTER_SERVER_CURRENT="当前使用后端为:"
|
||||||
|
SUBCONVERTER_SET_OK="设置成功!返回上级菜单"
|
||||||
|
|
||||||
|
SUBCONVERTER_UA_HINT="无法正确获取配置文件时可尝试使用"
|
||||||
|
SUBCONVERTER_UA_CURRENT="当前UA:"
|
||||||
|
SUBCONVERTER_UA_AUTO="使用自动UA(默认)"
|
||||||
|
SUBCONVERTER_UA_NONE="不使用UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM="使用自定义UA"
|
||||||
|
SUBCONVERTER_UA_CLEAR="清空UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_WARN="注意:\n自定义UA不可包含空格或特殊符号!"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_INPUT="请直接输入自定义UA"
|
||||||
19
scripts/lang/chs/task_cmd.lang
Normal file
19
scripts/lang/chs/task_cmd.lang
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
TASK_CMD_EVERY="每隔"
|
||||||
|
TASK_CMD_HOURLY="时每"
|
||||||
|
TASK_CMD_MIN="分钟"
|
||||||
|
TASK_CMD_CORE_SKIP="任务【自动更新内核】中止-未检测到版本更新"
|
||||||
|
TASK_CMD_CORE_DONE="任务【自动更新内核】下载完成,正在重启服务!"
|
||||||
|
TASK_CMD_CORE_DL_FAIL="任务【自动更新内核】出错-下载失败!"
|
||||||
|
TASK_CMD_CORE_VERIFY_FAIL="任务【自动更新内核】出错-内核校验失败!"
|
||||||
|
TASK_CMD_SCRIPT_SKIP="任务【自动更新脚本】中止-未检测到版本更新"
|
||||||
|
TASK_CMD_SCRIPT_UNZIP_FAIL="任务【自动更新脚本】出错-解压失败!"
|
||||||
|
TASK_CMD_DB_SKIP_PREFIX="任务【自动更新数据库文件】跳过-未检测到"
|
||||||
|
TASK_CMD_DB_SKIP_SUFFIX="版本更新"
|
||||||
|
TASK_CMD_DB_DL_FAIL_PREFIX="任务【自动更新数据库文件】更新【"
|
||||||
|
TASK_CMD_DB_DL_FAIL_SUFFIX="】下载失败!"
|
||||||
|
TASK_CMD_DB_OK_PREFIX="任务【自动更新数据库文件】更新【"
|
||||||
|
TASK_CMD_DB_OK_SUFFIX="】成功!"
|
||||||
|
TASK_CMD_RES_OK="成功"
|
||||||
|
TASK_CMD_RES_FAIL="失败"
|
||||||
|
TASK_CMD_EXEC_PREFIX="任务【"
|
||||||
|
TASK_CMD_EXEC_MID="】执行"
|
||||||
13
scripts/lang/chs/uninstall.lang
Normal file
13
scripts/lang/chs/uninstall.lang
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
UNINSTALL_WARN="警告:该操作不可逆!"
|
||||||
|
UNINSTALL_CONFIRM="是否确认卸载ShellCrash?"
|
||||||
|
UNINSTALL_YES="是"
|
||||||
|
UNINSTALL_NO="否"
|
||||||
|
UNINSTALL_KEEP_CONFIRM="是否保留脚本配置及订阅文件?"
|
||||||
|
UNINSTALL_ENV_ERROR="环境变量配置有误,请尝试手动移除安装目录!"
|
||||||
|
UNINSTALL_DONE="已卸载ShellCrash相关文件!有缘再会!"
|
||||||
|
UNINSTALL_CLOSE_HINT="请手动关闭当前窗口以重置环境变量!"
|
||||||
|
UNINSTALL_CANCELED="操作已取消!"
|
||||||
|
UNINSTALL_CRON_CLASH="clash服务"
|
||||||
|
UNINSTALL_CRON_SUB="订阅链接"
|
||||||
|
UNINSTALL_CRON_INIT="ShellCrash初始化"
|
||||||
|
UNINSTALL_SSH_MARK="启用外网访问SSH服务"
|
||||||
@@ -12,3 +12,6 @@ UG_IMPORT_CONFIG="这是运行前的最后一步"
|
|||||||
UG_CONFIG_TIP="你必须拥有一份配置文件才能运行服务!"
|
UG_CONFIG_TIP="你必须拥有一份配置文件才能运行服务!"
|
||||||
UG_CONFIG_RES="是否立即导入配置文件?"
|
UG_CONFIG_RES="是否立即导入配置文件?"
|
||||||
UG_FINAL_TIP="很好!现在只需要执行启动就可以愉快的使用了!"
|
UG_FINAL_TIP="很好!现在只需要执行启动就可以愉快的使用了!"
|
||||||
|
|
||||||
|
UG_IMPORT_NOW="立即导入"
|
||||||
|
UG_IMPORT_LATER="暂不导入"
|
||||||
|
|||||||
@@ -126,3 +126,33 @@ ADV_TABLE_INPUT="Please enter the routing table ID (do not modify unless necessa
|
|||||||
# =================================================
|
# =================================================
|
||||||
IPV6_REDIR="IPv6 Transparent Routing (Hijack IPv6 Traffic)"
|
IPV6_REDIR="IPv6 Transparent Routing (Hijack IPv6 Traffic)"
|
||||||
IPV6_DNS="IPv6 DNS Resolution (Return IPv6 addresses)"
|
IPV6_DNS="IPv6 DNS Resolution (Return IPv6 addresses)"
|
||||||
|
SET_YES="Yes"
|
||||||
|
SET_NO_BACK="No, back"
|
||||||
|
SET_SKIP_CERT_NOW="Current status: "
|
||||||
|
SET_ENABLED="enabled"
|
||||||
|
SET_DISABLED="disabled"
|
||||||
|
SET_SKIP_CERT_ENABLE_Q=" skip local certificate verification. Enable now?"
|
||||||
|
SET_SKIP_CERT_DISABLE_Q=" skip local certificate verification. Disable now?"
|
||||||
|
SET_SNIFFER_NOW="Current status: "
|
||||||
|
SET_SNIFFER_ENABLE_Q=" domain sniffer. Enable now?"
|
||||||
|
SET_SNIFFER_DISABLE_Q=" domain sniffer. Disable now?"
|
||||||
|
SET_LANG_ZH="简体中文"
|
||||||
|
SET_LANG_EN="English"
|
||||||
|
SET_SWITCH_RERUN="Switched successfully! Please re-run the script!"
|
||||||
|
SET_SWITCH_OK="Switched successfully!"
|
||||||
|
SET_MODE_SUFFIX="mode"
|
||||||
|
SET_SET_TO="Set to "
|
||||||
|
SET_BYPASS_TCP="TCP bypass forwarding"
|
||||||
|
SET_BYPASS_TU="TCP&UDP bypass forwarding"
|
||||||
|
SET_BYPASS_TCP_DESC="forward TCP traffic only to bypass router"
|
||||||
|
SET_BYPASS_TU_DESC="forward TCP&UDP traffic to bypass router"
|
||||||
|
SET_FW_AREA_CURRENT="Current hijack scope: "
|
||||||
|
SET_WARN="Notice:"
|
||||||
|
SET_DESC="Description:"
|
||||||
|
SET_BYPASS_WARN_1="This feature has risks. Do not use without network knowledge!"
|
||||||
|
SET_BYPASS_WARN_2="For UDP proxy, ensure bypass router runs a UDP-capable mode!"
|
||||||
|
SET_BYPASS_WARN_3="With systemd startup, core still runs idle. Conservative mode is recommended!"
|
||||||
|
SET_BYPASS_DESC_1="This mode does not start core; it only configures firewall forwarding and downstream devices need no extra gateway/DNS setup"
|
||||||
|
SET_BYPASS_DESC_2="Supports firewall routing split and device filtering, supports some cron tasks, but not IPv6"
|
||||||
|
SET_INPUT_BYPASS_IPV4="Please enter bypass-router IPv4 address"
|
||||||
|
SET_TIPS_ENTER_BACK="Tip: press Enter directly to return"
|
||||||
|
|||||||
@@ -4,3 +4,97 @@ TASK_RECOM_TITLE="Enable the following recommended automatic tasks?"
|
|||||||
TASK_RECOM_ITEM_1="Save Dashboard select every 10 minutes"
|
TASK_RECOM_ITEM_1="Save Dashboard select every 10 minutes"
|
||||||
TASK_RECOM_ITEM_2="Synchronize NTP after service startup"
|
TASK_RECOM_ITEM_2="Synchronize NTP after service startup"
|
||||||
TASK_RECOM_ITEM_3="Daily service restart at 03:00"
|
TASK_RECOM_ITEM_3="Daily service restart at 03:00"
|
||||||
|
TASK5_RUN_TASK=" run task: "
|
||||||
|
TASK5_CONFIRM_ADD_CRON="Confirm adding scheduled task?"
|
||||||
|
TASK5_YES="Yes"
|
||||||
|
TASK5_NO="No"
|
||||||
|
TASK5_TASK_PREFIX="Task ["
|
||||||
|
TASK5_TASK_ADDED="] \033[32madded!\033[0m"
|
||||||
|
TASK5_USER_ADD_HINT1="Command may contain spaces, please ensure it is executable!"
|
||||||
|
TASK5_USER_ADD_HINT2="Do not append conditions. Set conditions after adding command."
|
||||||
|
TASK5_USER_ADD_HINT3="You can also edit "
|
||||||
|
TASK5_USER_ADD_HINT4=" manually to add commands"
|
||||||
|
TASK5_INPUT_CMD="Please input command directly"
|
||||||
|
TASK5_OR_BACK="Or input 0 to return"
|
||||||
|
TASK5_INPUT="Please enter"
|
||||||
|
TASK5_CHECK_INPUT="Please check input: "
|
||||||
|
TASK5_INPUT_REMARK="Please enter task remark"
|
||||||
|
TASK5_CUSTOM_TASK="custom_task_"
|
||||||
|
TASK5_CUSTOM_ADDED="Custom task added!"
|
||||||
|
TASK5_INPUT_ERROR="Invalid input, please retry!"
|
||||||
|
TASK5_USER_DEL_HINT1="Input ID to remove custom task (built-in tasks won't be affected)"
|
||||||
|
TASK5_USER_DEL_HINT2="You may also edit "
|
||||||
|
TASK5_NO_CUSTOM_TASK="No custom task has been added yet"
|
||||||
|
TASK5_SELECT_ADD="Please select task to add:"
|
||||||
|
TASK5_SELECT_COND="Select execution condition for task "
|
||||||
|
TASK5_SELECT_COND2=":"
|
||||||
|
TASK5_COND_1="Scheduled task \033[32mweekly\033[0m"
|
||||||
|
TASK5_COND_2="Scheduled task \033[32mdaily\033[0m"
|
||||||
|
TASK5_COND_3="Scheduled task \033[32mhourly\033[0m"
|
||||||
|
TASK5_COND_4="Scheduled task \033[32mminutely\033[0m"
|
||||||
|
TASK5_WARN_LINE1=" --------- \033[31mWARNING\033[0m ---------"
|
||||||
|
TASK5_WARN_LINE2=" Do not use advanced triggers unless you know what you are doing!"
|
||||||
|
TASK5_WARN_LINE3=" ----------------------------------------"
|
||||||
|
TASK5_COND_5="Service \033[33mbefore start\033[0m"
|
||||||
|
TASK5_COND_6="Service \033[33mafter start\033[0m"
|
||||||
|
TASK5_COND_7="Service \033[33mrun every minute\033[0m"
|
||||||
|
TASK5_COND_8="After firewall service \033[33mrestart\033[0m"
|
||||||
|
TASK5_WEEK_HINT1="Input 1~7 for day of week (7=Sunday)"
|
||||||
|
TASK5_WEEK_HINT2="Input like 1,4,0 for Monday/Thursday/Sunday"
|
||||||
|
TASK5_WEEK_HINT3="Input 1~5 for Monday to Friday"
|
||||||
|
TASK5_WEEK_INPUT="Run on which weekday"
|
||||||
|
TASK5_HOUR_INPUT1="Run at which hour of that day (0~23)"
|
||||||
|
TASK5_CRON_WEEK="Weekly "
|
||||||
|
TASK5_CRON_WEEK2=" @ "
|
||||||
|
TASK5_OCLOCK=":00"
|
||||||
|
TASK5_DAY_HINT1="Input 1,7,15 for run at 1/7/15 o'clock"
|
||||||
|
TASK5_DAY_HINT2="Input 6~18 for every hour between 6 and 18"
|
||||||
|
TASK5_HOUR_INPUT2="Run at which hour daily (0~23)"
|
||||||
|
TASK5_MIN_INPUT="Run at which minute (0~59)"
|
||||||
|
TASK5_CRON_DAY="Daily "
|
||||||
|
TASK5_POINT=":"
|
||||||
|
TASK5_MINUTE=""
|
||||||
|
TASK5_EVERY_HOUR_INPUT="Run every how many hours (1~23)"
|
||||||
|
TASK5_EVERY="Every "
|
||||||
|
TASK5_HOUR=" hour(s)"
|
||||||
|
TASK5_EVERY_MIN_INPUT="Run every how many minutes (1~59)"
|
||||||
|
TASK5_MIN=" minute(s)"
|
||||||
|
TASK5_BFSTART="Before service start "
|
||||||
|
TASK5_AFSTART="After service start "
|
||||||
|
TASK5_RUNNING_HINT1="Input 10 for every 10 mins, 1440 for every 24 hrs"
|
||||||
|
TASK5_RUNNING_HINT2="Values >60 mins will be rounded by hour under current timezone"
|
||||||
|
TASK5_RUNNING_INPUT="Run every how many minutes (1~1440)"
|
||||||
|
TASK5_RUNNING_PREFIX="During runtime every "
|
||||||
|
TASK5_AFFW_HINT="This will inject startup code into /etc/init.d/firewall"
|
||||||
|
TASK5_CONFIRM_CONTINUE="Continue?"
|
||||||
|
TASK5_AFFW_PREFIX="After firewall restart "
|
||||||
|
TASK5_GUARD_WORD="guard"
|
||||||
|
TASK5_OLD_PREFIX="legacy-"
|
||||||
|
TASK5_NONE_TO_MANAGE="No task available to manage!"
|
||||||
|
TASK5_ADDED_TASKS="Added tasks:"
|
||||||
|
TASK5_CLEAR_OLD="Clear legacy tasks"
|
||||||
|
TASK5_CLEAR_ALL="Clear task list"
|
||||||
|
TASK5_OLD_CLEARED="Legacy tasks cleared!"
|
||||||
|
TASK5_ALL_CLEARED="All tasks cleared!"
|
||||||
|
TASK5_OLD_NOT_SUPPORT="Legacy tasks cannot be managed, remove them?"
|
||||||
|
TASK5_NO_BACK="No, return"
|
||||||
|
TASK5_CURRENT_TASK="Current task: "
|
||||||
|
TASK5_EDIT_TASK="\033[33mEdit\033[0m current task"
|
||||||
|
TASK5_DEL_TASK="\033[31mDelete\033[0m current task"
|
||||||
|
TASK5_RUN_ONCE="\033[32mRun once\033[0m now"
|
||||||
|
TASK5_VIEW_RECORD="View \033[33mexecution record\033[0m"
|
||||||
|
TASK5_RUN_OK="success!"
|
||||||
|
TASK5_RUN_FAIL="failed!"
|
||||||
|
TASK5_RECORD_NOT_FOUND="No execution record found!"
|
||||||
|
TASK5_USER_FILE_HEADER="#task_id(>200 in order)#task_command#task_desc(no # in cmd or desc)"
|
||||||
|
TASK5_MENU_TITLE="Scheduled Tasks"
|
||||||
|
TASK5_MENU_1="Add \033[32mautomatic task\033[0m"
|
||||||
|
TASK5_MENU_2="Manage \033[33mtask list\033[0m"
|
||||||
|
TASK5_MENU_3="View \033[36mtask logs\033[0m"
|
||||||
|
TASK5_MENU_4="Configure \033[36mlog push\033[0m"
|
||||||
|
TASK5_MENU_5="Add \033[33mcustom task\033[0m"
|
||||||
|
TASK5_MENU_6="Delete \033[33mcustom task\033[0m"
|
||||||
|
TASK5_MENU_7="Use \033[32mrecommended settings\033[0m"
|
||||||
|
TASK5_TASK_GREP="Task ["
|
||||||
|
TASK5_LOG_NOT_FOUND="No task-related log found!"
|
||||||
|
TASK5_PUSH_HINT="Please configure push channel and switch in log tools"
|
||||||
|
|||||||
67
scripts/lang/en/6_core_config.lang
Normal file
67
scripts/lang/en/6_core_config.lang
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
CORECFG_TITLE="Configuration Management"
|
||||||
|
CORECFG_HINT_SELECT_PROVIDER="Input a number to manage corresponding provider"
|
||||||
|
CORECFG_MENU_A="\033[32mAdd provider\033[0m (subscription/share link/local file)"
|
||||||
|
CORECFG_MENU_B="\033[36mGenerate local config\033[0m"
|
||||||
|
CORECFG_MENU_C="\033[33mGenerate online config\033[0m"
|
||||||
|
CORECFG_MENU_D="\033[31mClear provider list\033[0m"
|
||||||
|
CORECFG_MENU_E="\033[36mCustom config file\033[0m"
|
||||||
|
CORECFG_CORE_ONLY="Only for Mihomo/singboxr core, please switch core!"
|
||||||
|
CORECFG_ADD_PROVIDER_FIRST="Please add provider first!"
|
||||||
|
CORECFG_CLEAR_WARN="Warning: this will delete all providers and cannot be undone!"
|
||||||
|
CORECFG_CLEAR_CONFIRM="Confirm clearing provider list:"
|
||||||
|
CORECFG_YES="Yes"
|
||||||
|
CORECFG_NO="No"
|
||||||
|
CORECFG_NO_BACK="No, return"
|
||||||
|
CORECFG_INPUT_ALNUM="Please input letter or number"
|
||||||
|
CORECFG_INPUT="Please enter"
|
||||||
|
CORECFG_FILL_REQUIRED="Please complete required fields first!"
|
||||||
|
CORECFG_START_APPLY="Start service to apply config now?"
|
||||||
|
CORECFG_PROVIDER_SUPPORT="Supports adding subscription/share link/local file as provider"
|
||||||
|
CORECFG_SET_NAME="Set \033[36mname/alias\033[0m\t"
|
||||||
|
CORECFG_SET_LINK="Set \033[32mlink/path\033[0m:\t"
|
||||||
|
CORECFG_SET_OVERRIDE="Set \033[33mlocal generation override\033[0m"
|
||||||
|
CORECFG_SAVE_PROVIDER="\033[36mSave this provider\033[0m"
|
||||||
|
CORECFG_DEL_PROVIDER="\033[31mDelete this provider\033[0m"
|
||||||
|
CORECFG_MORE_CONFIG_HINT="For detailed settings below, go to corresponding feature page."
|
||||||
|
CORECFG_GEN_LOCAL_ONE="\033[32mLocal generate\033[0m config with this provider only"
|
||||||
|
CORECFG_GEN_ONLINE_ONE="\033[33mOnline generate\033[0m config with this provider only"
|
||||||
|
CORECFG_GET_ONLINE_DIRECT="Fetch this config online directly (without conversion)"
|
||||||
|
CORECFG_USE_DIRECT="Use this file directly as config (without local generation)"
|
||||||
|
CORECFG_NAME_HINT="Note:\nName/alias cannot duplicate, cannot be pure digits, and should not be too long!"
|
||||||
|
CORECFG_INPUT_NAME="Please input name/alias"
|
||||||
|
CORECFG_OR_BACK="or input 0 to return"
|
||||||
|
CORECFG_LINK_HINT1="\033[33mSubscription link\033[0m:\nClash config subscription URL starting with https/http"
|
||||||
|
CORECFG_LINK_HINT2="\033[36mShare link\033[0m:"
|
||||||
|
CORECFG_LINK_HINT3="\033[33mLocal file\033[0m:\nMust be placed under "
|
||||||
|
CORECFG_LINK_HINT4=""
|
||||||
|
CORECFG_LINK_HINT5="\033[36mBase64 \033[0m:\nPlease write to local file directly"
|
||||||
|
CORECFG_INPUT0_BACK="Input 0 to return"
|
||||||
|
CORECFG_SELECT_FILE_OR_LINK="Select file or input link"
|
||||||
|
CORECFG_INPUT_LINK="Please input link directly"
|
||||||
|
CORECFG_DANGER1="Warning:\nThis feature is incompatible with skip certificate verification"
|
||||||
|
CORECFG_DANGER2="Please make sure you fully understand what you are doing"
|
||||||
|
CORECFG_DANGER_CONFIRM="I confirm I can troubleshoot by myself"
|
||||||
|
CORECFG_INTERVAL1="Set \033[33mhealth-check interval\033[0m:\t"
|
||||||
|
CORECFG_INTERVAL2="Set \033[36mauto-update interval\033[0m:\t"
|
||||||
|
CORECFG_MIN="min"
|
||||||
|
CORECFG_HOUR="hour"
|
||||||
|
CORECFG_SET_UA="Set \033[33mbrowser UA\033[0m:\t"
|
||||||
|
CORECFG_SET_EXCLUDE="Set \033[31mexclude regex\033[0m:\t"
|
||||||
|
CORECFG_SET_INCLUDE="Set \033[32minclude regex\033[0m:\t"
|
||||||
|
CORECFG_CUR_INTERVAL="Current health-check interval:"
|
||||||
|
CORECFG_INPUT_INTERVAL1="Input health-check interval (minutes)"
|
||||||
|
CORECFG_RESET_INTERVAL1="or input r to reset to default (3 min)"
|
||||||
|
CORECFG_INPUT_INTERVAL2="Input auto-update interval (hours)"
|
||||||
|
CORECFG_RESET_INTERVAL2="or input r to reset to default (12 hours)"
|
||||||
|
CORECFG_CUR_UA_NONE="Current browser UA: none"
|
||||||
|
CORECFG_CUR_UA="Current browser UA: "
|
||||||
|
CORECFG_INPUT_UA="Input browser UA"
|
||||||
|
CORECFG_RESET_UA="or input r to reset UA to default (clash.meta)"
|
||||||
|
CORECFG_CUR_EXCLUDE_NONE="Current exclude rule: none"
|
||||||
|
CORECFG_CUR_EXCLUDE="Current exclude rule: "
|
||||||
|
CORECFG_INPUT_EXCLUDE="Input exclude keyword(s) (regex supported, no spaces)"
|
||||||
|
CORECFG_CLEAR_EXCLUDE="or input c to clear exclude rule"
|
||||||
|
CORECFG_CUR_INCLUDE_NONE="Current include rule: none"
|
||||||
|
CORECFG_CUR_INCLUDE="Current include rule: "
|
||||||
|
CORECFG_INPUT_INCLUDE="Input include keyword(s) (regex supported, no spaces)"
|
||||||
|
CORECFG_CLEAR_INCLUDE="or input c to clear include rule"
|
||||||
16
scripts/lang/en/7_gateway.lang
Normal file
16
scripts/lang/en/7_gateway.lang
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
GW_TITLE="Access & Control Menu"
|
||||||
|
GW_WARN="Notice: "
|
||||||
|
GW_FW_VPS_HINT="If running on a VPS, also allow related ports in your VPS security policy."
|
||||||
|
GW_FW_PORT_LIMIT="Up to 10 allowed ports are supported. Please remove some first."
|
||||||
|
GW_INPUT_ALLOW_PORT="Enter the port to allow"
|
||||||
|
GW_OK="Done"
|
||||||
|
GW_CORE_UNSUPPORTED=" core does not support this feature yet, please switch core first!"
|
||||||
|
GW_TG_DONE_PREFIX="Telegram bot setup completed! Use"
|
||||||
|
GW_TG_DONE_SUFFIX="to open the function menu!"
|
||||||
|
GW_SET="Configured"
|
||||||
|
GW_BOUND="Bound"
|
||||||
|
GW_INPUT_PORT_DEL0="Enter port (0 to delete)"
|
||||||
|
GW_INPUT_WSPATH="Enter ws-path (0 to delete)"
|
||||||
|
GW_INPUT_UUID="Enter UUID (0 to delete)"
|
||||||
|
GW_INPUT_HOST="Enter your public IP (v4/v6) or domain"
|
||||||
|
GW_SHARE_LINK_HINT="Your share link (do not share casually):"
|
||||||
11
scripts/lang/en/8_tools.lang
Normal file
11
scripts/lang/en/8_tools.lang
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
TOOLS_TITLE="Tools & Optimization"
|
||||||
|
TOOLS_SSH_DISABLE="Disable"
|
||||||
|
TOOLS_SSH_ENABLE="Enable"
|
||||||
|
TOOLS_ERR_PORT="Invalid input! Please enter a valid number (1000-65535)!"
|
||||||
|
TOOLS_ERR_PORT_OCCUPIED="This port is occupied by another process, please try another one!"
|
||||||
|
TOOLS_SSH_SET_OK="Set successfully, please re-enable WAN SSH access!"
|
||||||
|
TOOLS_SSH_ENABLED="WAN SSH access enabled!"
|
||||||
|
TOOLS_SSH_DISABLED="WAN SSH access disabled!"
|
||||||
|
TOOLS_DISABLE="Disable"
|
||||||
|
TOOLS_ENABLE="Enable"
|
||||||
|
TOOLS_CONFIGURED="Configured"
|
||||||
49
scripts/lang/en/9_upgrade.lang
Normal file
49
scripts/lang/en/9_upgrade.lang
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
UPG_ERR_TRY_OTHER_SOURCE="Please switch to another source and try downloading again!"
|
||||||
|
UPG_ERR_LOCAL_INSTALL="Or refer to \033[32;4mhttps://juewuy.github.io/bdaz\033[0m for local installation!"
|
||||||
|
UPG_TITLE="Update & Support"
|
||||||
|
UPG_CUR_DIR_SPACE="Current directory"
|
||||||
|
UPG_LOW_SPACE_HINT="Low free space in current directory, consider enabling low-flash mode!"
|
||||||
|
UPG_MENU_SCRIPT="Update "
|
||||||
|
UPG_MENU_SCRIPT_NAME="script"
|
||||||
|
UPG_MENU_CORE="Switch/Update "
|
||||||
|
UPG_MENU_CORE_NAME="core"
|
||||||
|
UPG_MENU_GEO="Install/Update local "
|
||||||
|
UPG_MENU_GEO_NAME="database files"
|
||||||
|
UPG_MENU_DB="Install/Update local "
|
||||||
|
UPG_MENU_DB_NAME="Dashboard"
|
||||||
|
UPG_MENU_CRT="Install/Update local "
|
||||||
|
UPG_MENU_CRT_NAME="certificates"
|
||||||
|
UPG_MENU_PAC=" proxy view"
|
||||||
|
UPG_MENU_SOURCE="Switch "
|
||||||
|
UPG_MENU_SOURCE_NAME="source and branch"
|
||||||
|
UPG_MENU_UNINSTALL="Uninstall ShellCrash"
|
||||||
|
UPG_MENU_THANKS="Thanks list"
|
||||||
|
UPG_PAC_LINK="PAC URL: "
|
||||||
|
UPG_PAC_GUIDE="PAC guide: "
|
||||||
|
UPG_THANKS_TITLE="Thanks to the following projects and developers!"
|
||||||
|
UPG_THANKS_SPECIAL="Special thanks: \033[36mall contributors and sponsors!\033[0m"
|
||||||
|
UPG_CHECKING="Checking updates..."
|
||||||
|
UPG_CHECK_OK="Update check succeeded"
|
||||||
|
UPG_CHECK_FAIL="Update check failed! Please switch source and retry!"
|
||||||
|
UPG_DOWNLOAD_FAIL="Download failed!"
|
||||||
|
UPG_EXTRACTING="Extracting files..."
|
||||||
|
UPG_EXTRACT_FAIL="Extraction failed!"
|
||||||
|
UPG_SCRIPT_OK="Script update succeeded!"
|
||||||
|
UPG_SCRIPT_WARN="Note: service will be stopped during update!"
|
||||||
|
UPG_SCRIPT_CUR_VER="Current script version: "
|
||||||
|
UPG_SCRIPT_NEW_VER="Latest script version: "
|
||||||
|
UPG_UPDATE_NOW="Update now"
|
||||||
|
UPG_SCRIPT_MGR_OK="Manager script updated successfully!"
|
||||||
|
UPG_CPUCORE_HINT1="Use only when CPU architecture detection fails or core cannot run!"
|
||||||
|
UPG_CPUCORE_HINT2="Not sure how to get core arch?"
|
||||||
|
UPG_CPUCORE_HINT3="Refer to: "
|
||||||
|
UPG_CPUCORE_LIST="Available online CPU architectures:"
|
||||||
|
UPG_CPUCORE_ERR="Please enter a valid CPU architecture!"
|
||||||
|
UPG_CORETYPE_CONFIRM="Please confirm custom core type:"
|
||||||
|
UPG_CORE_SWITCH_PREFIX="Switched from "
|
||||||
|
UPG_CORE_SWITCH_MID=" to "
|
||||||
|
UPG_CORE_SWITCH_SUFFIX=" core"
|
||||||
|
UPG_CORE_SWITCH_WARN="Geo DB and yaml/json configs are not compatible between the two cores"
|
||||||
|
UPG_CORE_SWITCH_KEEP="Keep related database files?"
|
||||||
|
UPG_KEEP="Keep"
|
||||||
|
UPG_NOT_KEEP="Do not keep"
|
||||||
68
scripts/lang/en/bot_tg.lang
Normal file
68
scripts/lang/en/bot_tg.lang
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
BOT_TG_PRIVATE_HINT="Please apply for a Telegram bot via \033[32;4mhttps://t.me/BotFather\033[0m and get its \033[36mAPI TOKEN\033[0m first"
|
||||||
|
BOT_TG_INPUT_TOKEN="Please enter your API TOKEN"
|
||||||
|
BOT_TG_PRIVATE_TOP="Please send to \033[32myour bot\033[33m, NOT BotFather!\033[0m"
|
||||||
|
BOT_TG_PUBLIC_HINT="Please message the bot: \033[32;4mhttps://t.me/ShellCrashtg_bot\033[0m"
|
||||||
|
BOT_TG_SET_DONE="Telegram log push has been configured!"
|
||||||
|
BOT_TG_CHATID_RETRY_PREFIX="Attempt"
|
||||||
|
BOT_TG_CHATID_RETRY_SUFFIX="to get chat ID failed, retrying..."
|
||||||
|
BOT_TG_SEND_KEY="Send this key:"
|
||||||
|
BOT_TG_SENT_CONFIRM="I have sent it"
|
||||||
|
BOT_TG_CHATID_FAIL="Unable to get chat ID. Please reconfigure or input ChatID manually!"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT="Usually visit"
|
||||||
|
BOT_TG_CHATID_MANUAL_HINT2="to find ChatID"
|
||||||
|
BOT_TG_INPUT_CHATID="Please input ChatID manually"
|
||||||
|
BOT_TG_CHATID_RECONFIG="Unable to get chat ID. Please reconfigure!"
|
||||||
|
BOT_TG_CRON_NAME="TG_BOT watchdog"
|
||||||
|
|
||||||
|
BOT_TG_HELP_GROUP="Group chat:"
|
||||||
|
BOT_TG_HELP_PROJECT="Project:"
|
||||||
|
BOT_TG_HELP_GUIDE="Guide:"
|
||||||
|
BOT_TG_HELP_COFFEE="Buy me a coffee:"
|
||||||
|
BOT_TG_HELP_AIRPORT="Partner provider:"
|
||||||
|
BOT_TG_RUN_ON="🟢Running"
|
||||||
|
BOT_TG_RUN_OFF="🟡Stopped"
|
||||||
|
BOT_TG_WELCOME="Welcome to ShellCrash!"
|
||||||
|
BOT_TG_SERVICE=" service "
|
||||||
|
BOT_TG_MEM_USED="Memory usage: "
|
||||||
|
BOT_TG_RUNNING_TIME="Running: "
|
||||||
|
BOT_TG_SELECT_ACTION="Please choose:"
|
||||||
|
BOT_TG_SELECT_FILE="Please choose file upload/download action:"
|
||||||
|
BOT_TG_BTN_START="✈️ Enable redirect"
|
||||||
|
BOT_TG_BTN_PURE="💧 Pure mode"
|
||||||
|
BOT_TG_BTN_RESTART="🕹 Restart service"
|
||||||
|
BOT_TG_BTN_LOG="📄 View logs"
|
||||||
|
BOT_TG_BTN_TRANSFER="🔃 File transfer"
|
||||||
|
BOT_TG_BTN_GET_LOG="📥 Download log"
|
||||||
|
BOT_TG_BTN_GET_BAK="💾 Backup settings"
|
||||||
|
BOT_TG_BTN_GET_CFG="⬇️ Download config"
|
||||||
|
BOT_TG_BTN_UP_CORE="🪐 Upload core"
|
||||||
|
BOT_TG_BTN_UP_BAK="🔄 Restore settings"
|
||||||
|
BOT_TG_BTN_UP_CFG="⬆️ Upload config"
|
||||||
|
BOT_TG_NO_CURL="⚠️ curl is missing on this device, only upload is supported!"
|
||||||
|
BOT_TG_UPLOAD_OK="success! Service will restart soon!"
|
||||||
|
BOT_TG_UPLOAD_FAIL="failed, please check file and retry!"
|
||||||
|
BOT_TG_CORE_UPDATE="Core update "
|
||||||
|
BOT_TG_CFG_RESTORED="Config restored, please restart service manually!"
|
||||||
|
BOT_TG_RESTORE_FAIL="Restore failed while extracting backup, please retry!"
|
||||||
|
BOT_TG_CFG_UPLOADED="Config uploaded, please restart service manually!"
|
||||||
|
BOT_TG_UPLOAD_FAIL2="Upload failed, please retry!"
|
||||||
|
BOT_TG_NET_UPLOAD_FAIL="Network error, upload failed! Please retry!"
|
||||||
|
BOT_TG_FILE_FORMAT_FAIL="File format mismatch, upload failed!"
|
||||||
|
BOT_TG_FW_ENABLED="ShellCrash redirect mode "
|
||||||
|
BOT_TG_FW_ENABLED_SUFFIX=" enabled!"
|
||||||
|
BOT_TG_SWITCH_PURE="Switched to pure mode!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED="ShellCrash service restarted!"
|
||||||
|
BOT_TG_UNFINISHED="Error: unfinished feature!"
|
||||||
|
BOT_TG_SEND_CORE="Please send core file ending with tar.gz/.gz/.upx for ["
|
||||||
|
BOT_TG_SEND_CORE_SUFFIX="]"
|
||||||
|
BOT_TG_SEND_BAK="Please send backup file in [.tar.gz] format!"
|
||||||
|
BOT_TG_SEND_CFG="Please send config file in ["
|
||||||
|
BOT_TG_SEND_CFG_SUFFIX="] format, custom config is supported"
|
||||||
|
BOT_TG_SWITCH_TO="Switched to "
|
||||||
|
BOT_TG_ALREADY="Already in "
|
||||||
|
BOT_TG_ALREADY_PURE="Already in pure mode!"
|
||||||
|
BOT_TG_SERVICE_RESTARTED_SHORT="🔄 Service restarted"
|
||||||
|
BOT_TG_LOG_CONTENT="📄 Logs (task logs filtered):"
|
||||||
|
BOT_TG_TASK_WORD="Task"
|
||||||
|
BOT_TG_INPUT_SUB="✏ Please enter new subscription URL:"
|
||||||
|
BOT_TG_SUB_UPDATED="Subscription update finished:"
|
||||||
3
scripts/lang/en/check_port.lang
Normal file
3
scripts/lang/en/check_port.lang
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
CHECK_PORT_RANGE_ERR="Invalid input! Please enter a valid value (1-65535)!"
|
||||||
|
CHECK_PORT_DUP_ERR="Invalid input! Please do not enter duplicate ports!"
|
||||||
|
CHECK_PORT_OCCUPIED_ERR="This port is already occupied by another process. Please enter a different one!"
|
||||||
35
scripts/lang/en/ddns.lang
Normal file
35
scripts/lang/en/ddns.lang
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
DDNS_WELCOME="Welcome to DDNS!"
|
||||||
|
DDNS_ADD_DONE="Service has been added!"
|
||||||
|
DDNS_INPUT_DOMAIN="Please enter your domain"
|
||||||
|
DDNS_INPUT_USER="Please enter username or email"
|
||||||
|
DDNS_INPUT_PASS="Please enter password or token"
|
||||||
|
DDNS_INPUT_CHECK_INTERVAL="Please enter check interval (minutes, default 10)"
|
||||||
|
DDNS_INPUT_FORCE_INTERVAL="Please enter force update interval (hours, default 24)"
|
||||||
|
DDNS_CONFIRM_INFO="Please confirm the following info:"
|
||||||
|
DDNS_FIELD_SERVICE="Provider:"
|
||||||
|
DDNS_FIELD_DOMAIN="Domain:"
|
||||||
|
DDNS_FIELD_USER="Username:"
|
||||||
|
DDNS_FIELD_INTERVAL="Check interval:"
|
||||||
|
DDNS_CONFIRM_ADD="Confirm add:"
|
||||||
|
DDNS_YES="Yes"
|
||||||
|
DDNS_REINPUT="No, re-enter"
|
||||||
|
DDNS_LIST_NOT_FOUND="DDNS list file not found, trying online update..."
|
||||||
|
DDNS_DOWNLOAD_FAILED="Download failed, please retry!"
|
||||||
|
DDNS_SELECT_PROVIDER="Please select provider:"
|
||||||
|
DDNS_INPUT_ERROR="Invalid input, please retry!"
|
||||||
|
DDNS_SELECT_NETMODE="Please select network mode:"
|
||||||
|
DDNS_IPV4="IPV4"
|
||||||
|
DDNS_IPV6="IPV6"
|
||||||
|
DDNS_DISABLE="Disable"
|
||||||
|
DDNS_ENABLE="Enable"
|
||||||
|
DDNS_UPDATE_NOW="Update now"
|
||||||
|
DDNS_EDIT_CURRENT="Edit current service"
|
||||||
|
DDNS_CURRENT_SERVICE=" current service"
|
||||||
|
DDNS_REMOVE_CURRENT="Remove current service"
|
||||||
|
DDNS_VIEW_LOG="View logs"
|
||||||
|
DDNS_NOT_SUPPORTED="This feature depends on OpenWrt built-in DDNS service; unsupported on current device."
|
||||||
|
DDNS_LIST_HEADER=" List Domain On IP Address"
|
||||||
|
DDNS_ADD_SERVICE="Add DDNS service"
|
||||||
|
DDNS_EXIT="Exit"
|
||||||
|
DDNS_INPUT_INDEX="Please enter index"
|
||||||
|
DDNS_INPUT_NUM_ERROR="Please enter a valid number!"
|
||||||
@@ -52,3 +52,34 @@ DNS_IPV6_NOT_SUPPORT="This option does not support IPv6 encrypted DNS!"
|
|||||||
|
|
||||||
DNS_ENCRYPT_OK="Encrypted DNS has been configured. If DNS issues occur, please reset DNS settings."
|
DNS_ENCRYPT_OK="Encrypted DNS has been configured. If DNS issues occur, please reset DNS settings."
|
||||||
DNS_CORE_REQUIRE="Please use the Mihomo or SingBox core"
|
DNS_CORE_REQUIRE="Please use the Mihomo or SingBox core"
|
||||||
|
DNS_SET_TO="Set to"
|
||||||
|
DNS_PROTECT_NOW="Current status: "
|
||||||
|
DNS_HOSTS_NOW="Current status: "
|
||||||
|
DNS_ENABLED="enabled"
|
||||||
|
DNS_DISABLED="disabled"
|
||||||
|
DNS_PROTECT_DISABLE_Q=" DNS leak protection. Disable now?"
|
||||||
|
DNS_PROTECT_ENABLE_Q=" DNS leak protection. Enable now?"
|
||||||
|
DNS_HOSTS_DISABLE_Q=" Hosts optimization. Disable now?"
|
||||||
|
DNS_HOSTS_ENABLE_Q=" Hosts optimization. Enable now?"
|
||||||
|
DNS_YES="Yes"
|
||||||
|
DNS_RESET_DEFAULT="Reset to defaults"
|
||||||
|
DNS_NO_BACK="No, back"
|
||||||
|
DNS_REMOVE_OK="Removed successfully"
|
||||||
|
DNS_REMOVE_FAIL="Remove failed"
|
||||||
|
DNS_INPUT_REDIR_PORT="Please input bypass-router IPv4 address"
|
||||||
|
DNS_INPUT_REDIR_RESET="or input r to reset DNS redirect port"
|
||||||
|
DNS_INPUT_REDIR_BACK="or input 0 to go back"
|
||||||
|
DNS_INPUT="Please enter"
|
||||||
|
DNS_CONFIRM_ADD="Please confirm the address to add: "
|
||||||
|
DNS_CONFIRM_OK="Confirm"
|
||||||
|
DNS_ADD_OK="Added successfully"
|
||||||
|
DNS_ADD_FAIL="Add failed"
|
||||||
|
DNS_DIRECT_NOW="Current DIRECT-DNS: "
|
||||||
|
DNS_PROXY_NOW="Current PROXY-DNS: "
|
||||||
|
DNS_DEFAULT_NOW="Current DEFAULT-DNS: "
|
||||||
|
DNS_INPUT_DIRECT_NEW="Please input new DIRECT-DNS"
|
||||||
|
DNS_INPUT_DIRECT_RESET="or input r to reset DIRECT-DNS"
|
||||||
|
DNS_INPUT_PROXY_NEW="Please input new PROXY-DNS"
|
||||||
|
DNS_INPUT_PROXY_RESET="or input r to reset PROXY-DNS"
|
||||||
|
DNS_INPUT_DEFAULT_NEW="Please input new DEFAULT-DNS"
|
||||||
|
DNS_INPUT_DEFAULT_RESET="or input r to reset DEFAULT-DNS"
|
||||||
|
|||||||
25
scripts/lang/en/providers.lang
Normal file
25
scripts/lang/en/providers.lang
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
PROVIDERS_MENU_GEN="Generate config including all providers"
|
||||||
|
PROVIDERS_MENU_TEMPLATE="Select \033[33mrule template\033[0m"
|
||||||
|
PROVIDERS_MENU_CLEAN="\033[33mClean\033[0m providers directory"
|
||||||
|
PROVIDERS_INPUT="Please enter a letter or number"
|
||||||
|
|
||||||
|
PROVIDERS_EMPTY_HINT="No link or local config file has been added yet. Please add one first!"
|
||||||
|
PROVIDERS_TEMPLATE_CURRENT="Current rule template: "
|
||||||
|
PROVIDERS_TEMPLATE_SELECT="Please select an online template:"
|
||||||
|
PROVIDERS_TEMPLATE_LOCAL="Use \033[36mlocal template\033[0m"
|
||||||
|
PROVIDERS_TEMPLATE_PATH="Please enter template path (absolute path)"
|
||||||
|
PROVIDERS_TEMPLATE_NOT_FOUND="Invalid input, template file not found!"
|
||||||
|
|
||||||
|
PROVIDERS_CLEAN_WARN="This will clear all files under"
|
||||||
|
PROVIDERS_CLEAN_WARN_END=""
|
||||||
|
PROVIDERS_CLEAN_CONFIRM="Continue?"
|
||||||
|
|
||||||
|
PROVIDERS_FETCHING_TEMPLATE="Fetching online template..."
|
||||||
|
PROVIDERS_DOWNLOAD_FAILED="Download failed. Please try switching install source!"
|
||||||
|
PROVIDERS_GEN_OK="Configuration file generated successfully!"
|
||||||
|
PROVIDERS_GEN_OK_SINGBOX="Configuration generated successfully! If startup times out, install the Singbox-srs common database package from Update menu."
|
||||||
|
PROVIDERS_GEN_FAILED="Failed to generate configuration file. Please check your input carefully!"
|
||||||
|
PROVIDERS_RESTART_ASK="Start/Restart service now?"
|
||||||
|
PROVIDERS_YES="Yes"
|
||||||
|
PROVIDERS_NO="No"
|
||||||
|
PROVIDERS_CRON_SUB_UPDATE="Update subscription"
|
||||||
34
scripts/lang/en/set_crashdir.lang
Normal file
34
scripts/lang/en/set_crashdir.lang
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
SCD_SELECT_INSTALL_DIR="Please select install directory:"
|
||||||
|
SCD_INPUT_NUM="Please enter a number"
|
||||||
|
SCD_INPUT_ERROR="Invalid input! Please retry!"
|
||||||
|
SCD_XIAOMI_DETECTED="Xiaomi stock firmware detected, select installation location:"
|
||||||
|
SCD_CUSTOM_DIR_WARN="Custom directory (not recommended)"
|
||||||
|
SCD_EXIT_INSTALL="Exit installation"
|
||||||
|
SCD_SELECT_USB_DIR="Please select USB directory:"
|
||||||
|
SCD_ASUS_DM_NOT_FOUND="Download Master startup file not found:"
|
||||||
|
SCD_CHECK_SETTING="please check your settings!"
|
||||||
|
SCD_ASUS_DETECTED="Asus firmware detected, please select installation method"
|
||||||
|
SCD_ASUS_INSTALL_DM="Install via USB + Download Master (all firmwares, ARM only)"
|
||||||
|
SCD_ASUS_INSTALL_SCRIPT="Install via startup script (some Merlin firmwares only)"
|
||||||
|
SCD_ASUS_DM_HINT="Install and enable Download Master in router web UI first, then select external storage directory."
|
||||||
|
SCD_ASUS_REINSTALL_HINT="If boot auto-start fails, please reinstall with USB + Download Master."
|
||||||
|
SCD_PATH_FORMAT_HINT="Path must start with /. Files under virtual memory (/tmp,/opt,/sys...) will be lost after reboot!"
|
||||||
|
SCD_PATH_FREE_SPACE="Available paths free space:"
|
||||||
|
SCD_INPUT_CUSTOM_DIR="Please input custom path"
|
||||||
|
SCD_PATH_ERROR="Invalid path! Please retry!"
|
||||||
|
SCD_INSTALL_SPACE_HINT="Notice: ShellCrash requires at least ~1MB free space"
|
||||||
|
SCD_INSTALL_ETC="Install in \033[32m/etc\033[0m (root users)"
|
||||||
|
SCD_INSTALL_USR="Install in \033[32m/usr/share\033[0m (Linux systems)"
|
||||||
|
SCD_INSTALL_HOME="Install in \033[32mcurrent user dir\033[0m (non-root users)"
|
||||||
|
SCD_INSTALL_USB="Install in \033[32mexternal storage\033[0m"
|
||||||
|
SCD_INSTALL_MANUAL="Set install directory manually"
|
||||||
|
SCD_INSTALL_CANCELED="Installation canceled"
|
||||||
|
SCD_NO_WRITE_PREFIX="No write permission on "
|
||||||
|
SCD_NO_WRITE_SUFFIX=", please retry!"
|
||||||
|
SCD_TARGET_DIR_PREFIX="Target directory "
|
||||||
|
SCD_TARGET_DIR_SPACE=" free space: "
|
||||||
|
SCD_CONFIRM_INSTALL="Confirm installation?"
|
||||||
|
SCD_YES="Yes"
|
||||||
|
SCD_NO="No"
|
||||||
|
SCD_DIR_FREE=" dir, free: "
|
||||||
|
SCD_SOFT_SOLID="(supports soft solidification)"
|
||||||
52
scripts/lang/en/setboot.lang
Normal file
52
scripts/lang/en/setboot.lang
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
SETBOOT_NOT_SET="Not set"
|
||||||
|
SETBOOT_SECOND="s"
|
||||||
|
SETBOOT_TITLE="Startup Settings"
|
||||||
|
SETBOOT_ITEM_AUTO="Autostart:"
|
||||||
|
SETBOOT_ITEM_OLD="Conservative mode:"
|
||||||
|
SETBOOT_ITEM_OLD_DESC="--- cron based check (every minute)"
|
||||||
|
SETBOOT_ITEM_DELAY="Startup delay:"
|
||||||
|
SETBOOT_ITEM_DELAY_DESC="--- helps when service is restricted right after boot"
|
||||||
|
SETBOOT_ITEM_MINI="Low-flash mode:"
|
||||||
|
SETBOOT_ITEM_MINI_DESC="--- for devices with limited flash space"
|
||||||
|
SETBOOT_ITEM_MINI_DIR="Low-flash directory:"
|
||||||
|
SETBOOT_ITEM_NETCHK="Startup network check:"
|
||||||
|
SETBOOT_ITEM_NETCHK_DESC="--- disable to skip network check on startup"
|
||||||
|
SETBOOT_VIEW_LOG="View startup logs"
|
||||||
|
SETBOOT_AUTO_OFF="ShellCrash autostart disabled!"
|
||||||
|
SETBOOT_AUTO_ON="ShellCrash autostart enabled!"
|
||||||
|
SETBOOT_CRON_INIT="ShellCrash initialization"
|
||||||
|
SETBOOT_OLDMODE_ON="Switched to conservative startup mode!"
|
||||||
|
SETBOOT_OLDMODE_OFF="Switched to system daemon startup mode!"
|
||||||
|
SETBOOT_MODE_UNSUPPORTED="Current device does not support other startup modes!"
|
||||||
|
SETBOOT_DELAY_HINT1="If your device runs normally after boot, no need to configure this."
|
||||||
|
SETBOOT_DELAY_HINT2="Recommended between 30~120 seconds, tune according to your device issue."
|
||||||
|
SETBOOT_DELAY_INPUT="Please enter startup delay (0~300s)"
|
||||||
|
SETBOOT_SET_OK="Set successfully!"
|
||||||
|
SETBOOT_DELAY_INVALID="Invalid input or over 300s, please retry!"
|
||||||
|
SETBOOT_MINI_NEEDED_NO="Your device has enough space (>20M), no need to enable!"
|
||||||
|
SETBOOT_SYSTEMD_WARN="systemd startup is unsupported here, enable conservative mode first!"
|
||||||
|
SETBOOT_MINI_ENABLED="Low-flash mode has been enabled!"
|
||||||
|
SETBOOT_MINI_DIR_HINT="To change directory, use [Set low-flash directory]."
|
||||||
|
SETBOOT_MINI_DISABLE_WARN="Remaining space is below 8M; disabling may break runtime!"
|
||||||
|
SETBOOT_MINI_DISABLE_CONFIRM="Confirm disabling this feature?"
|
||||||
|
SETBOOT_YES="Yes"
|
||||||
|
SETBOOT_NO_BACK="No, return"
|
||||||
|
SETBOOT_MINI_DISABLED="Low-flash mode has been disabled!"
|
||||||
|
SETBOOT_BINDIR_HINT1="If set to memory, related files will be re-downloaded after each boot."
|
||||||
|
SETBOOT_BINDIR_HINT2="Ensure install source is directly reachable, or startup may fail."
|
||||||
|
SETBOOT_BINDIR_TMP="Use memory (/tmp)"
|
||||||
|
SETBOOT_BINDIR_USB="Select USB directory"
|
||||||
|
SETBOOT_BINDIR_CUSTOM="Custom directory"
|
||||||
|
SETBOOT_SELECT_INSTALL_DIR="Please select install directory:"
|
||||||
|
SETBOOT_SPACE_USED="Used storage:"
|
||||||
|
SETBOOT_INPUT_ERROR="Invalid input, please retry!"
|
||||||
|
SETBOOT_INPUT_CMD="Please input command/path directly"
|
||||||
|
SETBOOT_INPUT_OR_BACK="Or input 0 to return"
|
||||||
|
SETBOOT_INPUT="Please enter"
|
||||||
|
SETBOOT_NETCHK_HINT1="If your device can run normally after boot, no need to change this."
|
||||||
|
SETBOOT_NETCHK_HINT2="When disabled, low-flash or online rules (e.g. rule-set) may fail due to no network."
|
||||||
|
SETBOOT_NETCHK_HINT3="When enabled, low-performance/slow-dial devices may timeout and fail startup."
|
||||||
|
SETBOOT_NETCHK_OFF_CONFIRM="Network check is \033[33mdisabled\033[0m. Enable it?"
|
||||||
|
SETBOOT_NETCHK_ON_CONFIRM="Network check is \033[33menabled\033[0m. Disable it?"
|
||||||
|
SETBOOT_TASK_WORD="Task"
|
||||||
|
SETBOOT_LOG_NOT_FOUND="Related log not found!"
|
||||||
33
scripts/lang/en/subconverter.lang
Normal file
33
scripts/lang/en/subconverter.lang
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
SUBCONVERTER_MENU_GEN="Generate config including all nodes and subscriptions"
|
||||||
|
SUBCONVERTER_MENU_EXCLUDE="Set \033[31mexclude node regex\033[0m"
|
||||||
|
SUBCONVERTER_MENU_INCLUDE="Set \033[32minclude node regex\033[0m"
|
||||||
|
SUBCONVERTER_MENU_RULE="Select \033[33monline rule template\033[0m"
|
||||||
|
SUBCONVERTER_MENU_SERVER="Select Subconverter server"
|
||||||
|
SUBCONVERTER_MENU_UA="Custom browser UA"
|
||||||
|
|
||||||
|
SUBCONVERTER_INPUT="Please enter"
|
||||||
|
SUBCONVERTER_BACK="or enter 0 to return"
|
||||||
|
|
||||||
|
SUBCONVERTER_EXCLUDE_HINT1="Nodes matching keywords will be blocked during import!"
|
||||||
|
SUBCONVERTER_INCLUDE_HINT1="Only nodes matching keywords will be imported!!!"
|
||||||
|
SUBCONVERTER_KEYWORD_SPLIT="Use \033[30;47m | \033[0m to separate multiple keywords"
|
||||||
|
SUBCONVERTER_REGEX_HINT="\033[32mRegex is supported\033[0m. Use \033[30;47m + \033[0m instead of spaces"
|
||||||
|
SUBCONVERTER_EXCLUDE_INPUT="Enter exclude keyword(s) directly"
|
||||||
|
SUBCONVERTER_INCLUDE_INPUT="Enter include keyword(s) directly"
|
||||||
|
SUBCONVERTER_EXCLUDE_CLEAR="or enter d to \033[31mclear\033[0m exclude keywords"
|
||||||
|
SUBCONVERTER_INCLUDE_CLEAR="or enter d to \033[31mclear\033[0m include keywords"
|
||||||
|
|
||||||
|
SUBCONVERTER_RULE_CURRENT="Current rule: "
|
||||||
|
SUBCONVERTER_SERVER_HINT="The following third-party servers are collected from the internet. Please evaluate their security by yourself!"
|
||||||
|
SUBCONVERTER_SERVER_THANKS="Thanks to the contributors below for their great work!!!"
|
||||||
|
SUBCONVERTER_SERVER_CURRENT="Current backend: "
|
||||||
|
SUBCONVERTER_SET_OK="Settings saved. Returning to previous menu"
|
||||||
|
|
||||||
|
SUBCONVERTER_UA_HINT="Try this if the config file cannot be fetched correctly"
|
||||||
|
SUBCONVERTER_UA_CURRENT="Current UA: "
|
||||||
|
SUBCONVERTER_UA_AUTO="Use auto UA (default)"
|
||||||
|
SUBCONVERTER_UA_NONE="Do not use UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM="Use custom UA"
|
||||||
|
SUBCONVERTER_UA_CLEAR="Clear UA"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_WARN="Note:\nCustom UA cannot contain spaces or special symbols!"
|
||||||
|
SUBCONVERTER_UA_CUSTOM_INPUT="Enter custom UA"
|
||||||
19
scripts/lang/en/task_cmd.lang
Normal file
19
scripts/lang/en/task_cmd.lang
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
TASK_CMD_EVERY="every"
|
||||||
|
TASK_CMD_HOURLY="hourly"
|
||||||
|
TASK_CMD_MIN="minute"
|
||||||
|
TASK_CMD_CORE_SKIP="Task [Auto update core] skipped - no new version detected"
|
||||||
|
TASK_CMD_CORE_DONE="Task [Auto update core] download complete, restarting service"
|
||||||
|
TASK_CMD_CORE_DL_FAIL="Task [Auto update core] failed - download error"
|
||||||
|
TASK_CMD_CORE_VERIFY_FAIL="Task [Auto update core] failed - core verification error"
|
||||||
|
TASK_CMD_SCRIPT_SKIP="Task [Auto update script] skipped - no new version detected"
|
||||||
|
TASK_CMD_SCRIPT_UNZIP_FAIL="Task [Auto update script] failed - extract error"
|
||||||
|
TASK_CMD_DB_SKIP_PREFIX="Task [Auto update database] skipped - no new version for "
|
||||||
|
TASK_CMD_DB_SKIP_SUFFIX=""
|
||||||
|
TASK_CMD_DB_DL_FAIL_PREFIX="Task [Auto update database] failed downloading ["
|
||||||
|
TASK_CMD_DB_DL_FAIL_SUFFIX="]"
|
||||||
|
TASK_CMD_DB_OK_PREFIX="Task [Auto update database] updated ["
|
||||||
|
TASK_CMD_DB_OK_SUFFIX="] successfully"
|
||||||
|
TASK_CMD_RES_OK="success"
|
||||||
|
TASK_CMD_RES_FAIL="failed"
|
||||||
|
TASK_CMD_EXEC_PREFIX="Task ["
|
||||||
|
TASK_CMD_EXEC_MID="] result: "
|
||||||
13
scripts/lang/en/uninstall.lang
Normal file
13
scripts/lang/en/uninstall.lang
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
UNINSTALL_WARN="Warning: this action is irreversible!"
|
||||||
|
UNINSTALL_CONFIRM="Are you sure you want to uninstall ShellCrash?"
|
||||||
|
UNINSTALL_YES="Yes"
|
||||||
|
UNINSTALL_NO="No"
|
||||||
|
UNINSTALL_KEEP_CONFIRM="Keep script configs and subscription files?"
|
||||||
|
UNINSTALL_ENV_ERROR="Environment variable configuration is incorrect. Please remove the installation directory manually!"
|
||||||
|
UNINSTALL_DONE="ShellCrash related files have been removed. Goodbye!"
|
||||||
|
UNINSTALL_CLOSE_HINT="Please close the current terminal window manually to reset environment variables!"
|
||||||
|
UNINSTALL_CANCELED="Operation canceled!"
|
||||||
|
UNINSTALL_CRON_CLASH="clash service"
|
||||||
|
UNINSTALL_CRON_SUB="subscription link"
|
||||||
|
UNINSTALL_CRON_INIT="ShellCrash initialization"
|
||||||
|
UNINSTALL_SSH_MARK="Enable SSH access from WAN"
|
||||||
@@ -12,3 +12,6 @@ UG_IMPORT_CONFIG="Import configuration file? (Last step before running)"
|
|||||||
UG_CONFIG_TIP="You must have a configuration file to run the service!"
|
UG_CONFIG_TIP="You must have a configuration file to run the service!"
|
||||||
UG_CONFIG_RES="Importing now? "
|
UG_CONFIG_RES="Importing now? "
|
||||||
UG_FINAL_TIP="Great! Now just start the service to enjoy!"
|
UG_FINAL_TIP="Great! Now just start the service to enjoy!"
|
||||||
|
|
||||||
|
UG_IMPORT_NOW="Import now"
|
||||||
|
UG_IMPORT_LATER="Not now"
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ settings() {
|
|||||||
1)
|
1)
|
||||||
if [ "$USER" != root ] && [ "$USER" != admin ]; then
|
if [ "$USER" != root ] && [ "$USER" != admin ]; then
|
||||||
comp_box "$SET_WARN_NONROOT"
|
comp_box "$SET_WARN_NONROOT"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SET_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SET_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
set_redir_mod
|
set_redir_mod
|
||||||
@@ -63,13 +63,13 @@ settings() {
|
|||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ "$skip_cert" = "OFF" ]; then
|
if [ "$skip_cert" = "OFF" ]; then
|
||||||
content_line "当前\033[33m已禁用\033[0m跳过本地证书验证,是否确认启用?"
|
content_line "$SET_SKIP_CERT_NOW\033[33m$SET_DISABLED\033[0m$SET_SKIP_CERT_ENABLE_Q"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已启用\033[0m跳过本地证书验证,是否确认禁用?"
|
content_line "$SET_SKIP_CERT_NOW\033[33m$SET_ENABLED\033[0m$SET_SKIP_CERT_DISABLE_Q"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SET_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SET_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ "$num" = 1 ]; then
|
if [ "$num" = 1 ]; then
|
||||||
if [ "$skip_cert" = OFF ]; then
|
if [ "$skip_cert" = OFF ]; then
|
||||||
@@ -86,9 +86,9 @@ settings() {
|
|||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
if [ "$sniffer" = "OFF" ]; then
|
if [ "$sniffer" = "OFF" ]; then
|
||||||
comp_box "当前\033[33m已禁用\033[0m域名嗅探,是否确认启用?"
|
comp_box "$SET_SNIFFER_NOW\033[33m$SET_DISABLED\033[0m$SET_SNIFFER_ENABLE_Q"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SET_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SET_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ "$num" = 1 ]; then
|
if [ "$num" = 1 ]; then
|
||||||
line_break
|
line_break
|
||||||
@@ -108,9 +108,9 @@ settings() {
|
|||||||
msg_alert "\033[31m$SET_SNIFFER_LOCKED\033[0m"
|
msg_alert "\033[31m$SET_SNIFFER_LOCKED\033[0m"
|
||||||
continue
|
continue
|
||||||
else
|
else
|
||||||
comp_box "当前\033[33m已启用\033[0m域名嗅探,是否确认禁用?"
|
comp_box "$SET_SNIFFER_NOW\033[33m$SET_ENABLED\033[0m$SET_SNIFFER_DISABLE_Q"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SET_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SET_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ "$num" = 1 ]; then
|
if [ "$num" = 1 ]; then
|
||||||
sniffer=OFF
|
sniffer=OFF
|
||||||
@@ -121,15 +121,15 @@ settings() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
setconfig sniffer "$sniffer"
|
setconfig sniffer "$sniffer"
|
||||||
btm_box "\033[32m操作成功\033[0m"
|
btm_box "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
sleep 1
|
sleep 1
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
if pidof CrashCore >/dev/null; then
|
if pidof CrashCore >/dev/null; then
|
||||||
comp_box "\033[33m$SET_CORE_RUNNING\033[0m" \
|
comp_box "\033[33m$SET_CORE_RUNNING\033[0m" \
|
||||||
"$SET_CORE_STOP_CONFIRM"
|
"$SET_CORE_STOP_CONFIRM"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SET_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SET_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
"$CRASHDIR/start.sh" stop && set_adv_config
|
"$CRASHDIR/start.sh" stop && set_adv_config
|
||||||
@@ -203,8 +203,8 @@ settings() {
|
|||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
comp_box "1) 简体中文" \
|
comp_box "1) $SET_LANG_ZH" \
|
||||||
"2) English" \
|
"2) $SET_LANG_EN" \
|
||||||
"" \
|
"" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
@@ -214,7 +214,7 @@ settings() {
|
|||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
echo chs >"$CRASHDIR"/configs/i18n.cfg
|
echo chs >"$CRASHDIR"/configs/i18n.cfg
|
||||||
msg_alert "\033[32m切换成功!请重新运行脚本!\033[0m"
|
msg_alert "\033[32m$SET_SWITCH_RERUN\033[0m"
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
echo en >"$CRASHDIR"/configs/i18n.cfg
|
echo en >"$CRASHDIR"/configs/i18n.cfg
|
||||||
@@ -243,7 +243,7 @@ settings() {
|
|||||||
. "$CRASHDIR"/menus/tui_lite.sh
|
. "$CRASHDIR"/menus/tui_lite.sh
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
msg_alert "\033[32m切换成功!\033[0m"
|
msg_alert "\033[32m$SET_SWITCH_OK\033[0m"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
@@ -255,7 +255,7 @@ settings() {
|
|||||||
set_redir_config() {
|
set_redir_config() {
|
||||||
setconfig redir_mod "$redir_mod"
|
setconfig redir_mod "$redir_mod"
|
||||||
setconfig dns_mod "$dns_mod"
|
setconfig dns_mod "$dns_mod"
|
||||||
msg_alert "\033[36m$SET_REDIR_APPLIED $redir_mod 模式\033[0m"
|
msg_alert "\033[36m$SET_REDIR_APPLIED $redir_mod $SET_MODE_SUFFIX\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 路由模式设置
|
# 路由模式设置
|
||||||
@@ -269,15 +269,15 @@ set_redir_mod() {
|
|||||||
comp_box "\033[33m$SET_REDIR_RESTART_HINT\033[0m" \
|
comp_box "\033[33m$SET_REDIR_RESTART_HINT\033[0m" \
|
||||||
"$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m; $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m"
|
"$SET_REDIR_CURRENT\033[47;30m$redir_mod$MENU_MOD\033[0m; $SET_CORE_CURRENT\033[47;30m$crashcore\033[0m"
|
||||||
[ "$firewall_area" -le 3 ] && {
|
[ "$firewall_area" -le 3 ] && {
|
||||||
content_line "1) 设为\033[32m$SET_REDIR_REDIR\033[0m:\t$SET_REDIR_REDIRDES"
|
content_line "1) $SET_SET_TO\033[32m$SET_REDIR_REDIR\033[0m:\t$SET_REDIR_REDIRDES"
|
||||||
content_line "2) 设为\033[36m$SET_REDIR_MIX\033[0m:\t$SET_REDIR_MIXDES"
|
content_line "2) $SET_SET_TO\033[36m$SET_REDIR_MIX\033[0m:\t$SET_REDIR_MIXDES"
|
||||||
content_line "3) 设为\033[32m$SET_REDIR_TPROXY\033[0m:\t$SET_REDIR_TPROXYDES"
|
content_line "3) $SET_SET_TO\033[32m$SET_REDIR_TPROXY\033[0m:\t$SET_REDIR_TPROXYDES"
|
||||||
content_line "4) 设为\033[33m$SET_REDIR_TUN\033[0m:\t$SET_REDIR_TUNDES"
|
content_line "4) $SET_SET_TO\033[33m$SET_REDIR_TUN\033[0m:\t$SET_REDIR_TUNDES"
|
||||||
content_line ""
|
content_line ""
|
||||||
}
|
}
|
||||||
[ "$firewall_area" = 5 ] && {
|
[ "$firewall_area" = 5 ] && {
|
||||||
content_line "5) \033[32mTCP旁路转发\033[0m: 仅转发TCP流量至旁路由"
|
content_line "5) \033[32m$SET_BYPASS_TCP\033[0m: $SET_BYPASS_TCP_DESC"
|
||||||
content_line "6) \033[36mT&U旁路转发\033[0m: 转发TCP&UDP流量至旁路由"
|
content_line "6) \033[36m$SET_BYPASS_TU\033[0m: $SET_BYPASS_TU_DESC"
|
||||||
content_line ""
|
content_line ""
|
||||||
}
|
}
|
||||||
btm_box "7) $SET_FW_AREA:\t\033[47;30m$firewall_area_dsc\033[0m" \
|
btm_box "7) $SET_FW_AREA:\t\033[47;30m$firewall_area_dsc\033[0m" \
|
||||||
@@ -338,11 +338,11 @@ set_redir_mod() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
redir_mod='TCP旁路转发'
|
redir_mod='$SET_BYPASS_TCP'
|
||||||
set_redir_config
|
set_redir_config
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
redir_mod='T&U旁路转发'
|
redir_mod='$SET_BYPASS_TU'
|
||||||
set_redir_config
|
set_redir_config
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
@@ -541,7 +541,7 @@ set_firewall_area() {
|
|||||||
comp_box "\033[33m$FW_AREA_NOTE_1\033[0m" \
|
comp_box "\033[33m$FW_AREA_NOTE_1\033[0m" \
|
||||||
"\033[33m$FW_AREA_NOTE_2\033[0m" \
|
"\033[33m$FW_AREA_NOTE_2\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"当前路由劫持范围:$firewall_area_dsc"
|
"$SET_FW_AREA_CURRENT$firewall_area_dsc"
|
||||||
btm_box "1) \033[32m$FW_AREA_LAN\033[0m" \
|
btm_box "1) \033[32m$FW_AREA_LAN\033[0m" \
|
||||||
"2) \033[36m$FW_AREA_LOCAL\033[0m" \
|
"2) \033[36m$FW_AREA_LOCAL\033[0m" \
|
||||||
"3) \033[32m$FW_AREA_BOTH\033[0m" \
|
"3) \033[32m$FW_AREA_BOTH\033[0m" \
|
||||||
@@ -573,19 +573,19 @@ set_firewall_area() {
|
|||||||
common_success
|
common_success
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
comp_box "\033[31m注意:\033[0m" \
|
comp_box "\033[31m$SET_WARN\033[0m" \
|
||||||
"此功能存在多种风险如无网络基础请勿尝试!" \
|
"$SET_BYPASS_WARN_1" \
|
||||||
"如需代理UDP,请确保旁路由运行了支持UDP代理的模式!" \
|
"$SET_BYPASS_WARN_2" \
|
||||||
"如使用systemd方式启动,内核依然会空载运行,建议使用保守模式!" \
|
"$SET_BYPASS_WARN_3" \
|
||||||
"\033[33m说明:\033[0m" \
|
"\033[33m$SET_DESC\033[0m" \
|
||||||
"此功能不启动内核仅配置防火墙转发,且子设备无需额外设置网关DNS" \
|
"$SET_BYPASS_DESC_1" \
|
||||||
"支持防火墙分流及设备过滤,支持部分定时任务,但不支持ipv6"
|
"$SET_BYPASS_DESC_2"
|
||||||
read -r -p "请直接输入旁路由IPV4地址> " bypass_host
|
read -r -p "$SET_INPUT_BYPASS_IPV4> " bypass_host
|
||||||
[ -n "$bypass_host" ] && {
|
[ -n "$bypass_host" ] && {
|
||||||
firewall_area=$num
|
firewall_area=$num
|
||||||
setconfig firewall_area "$firewall_area"
|
setconfig firewall_area "$firewall_area"
|
||||||
setconfig bypass_host "$bypass_host"
|
setconfig bypass_host "$bypass_host"
|
||||||
redir_mod=TCP旁路转发
|
redir_mod=$SET_BYPASS_TCP
|
||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
@@ -619,7 +619,7 @@ set_firewall_vm() {
|
|||||||
comp_box "$VM_INPUT_DESC_1" \
|
comp_box "$VM_INPUT_DESC_1" \
|
||||||
"$VM_INPUT_DESC_2 \033[32m10.88.0.0/16 172.17.0.0/16\033[0m" \
|
"$VM_INPUT_DESC_2 \033[32m10.88.0.0/16 172.17.0.0/16\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"Tips:直接回车确认可返回上级菜单"
|
"$SET_TIPS_ENTER_BACK"
|
||||||
read -r -p "$VM_INPUT_NET> " text
|
read -r -p "$VM_INPUT_NET> " text
|
||||||
[ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON
|
[ -n "$text" ] && vm_ipv4="$text" && vm_redir=ON
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_MODULE_4_SETBOOT_LOADED" ] && return
|
[ -n "$__IS_MODULE_4_SETBOOT_LOADED" ] && return
|
||||||
__IS_MODULE_4_SETBOOT_LOADED=1
|
__IS_MODULE_4_SETBOOT_LOADED=1
|
||||||
|
|
||||||
|
load_lang setboot
|
||||||
|
|
||||||
allow_autostart() {
|
allow_autostart() {
|
||||||
if [ -f /etc/rc.common ] && [ "$(cat /proc/1/comm)" = "procd" ]; then
|
if [ -f /etc/rc.common ] && [ "$(cat /proc/1/comm)" = "procd" ]; then
|
||||||
/etc/init.d/shellcrash enable
|
/etc/init.d/shellcrash enable
|
||||||
@@ -29,25 +31,25 @@ setboot() {
|
|||||||
[ -z "$start_old" ] && start_old=OFF
|
[ -z "$start_old" ] && start_old=OFF
|
||||||
|
|
||||||
if [ -z "$start_delay" ] || [ "$start_delay" = 0 ]; then
|
if [ -z "$start_delay" ] || [ "$start_delay" = 0 ]; then
|
||||||
delay=未设置
|
delay="$SETBOOT_NOT_SET"
|
||||||
else
|
else
|
||||||
delay="${start_delay}秒"
|
delay="${start_delay}$SETBOOT_SECOND"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
check_autostart && auto_set="ON" || auto_set="OFF"
|
check_autostart && auto_set="ON" || auto_set="OFF"
|
||||||
[ "${BINDIR}" = "$CRASHDIR" ] && mini_clash=OFF || mini_clash=ON
|
[ "${BINDIR}" = "$CRASHDIR" ] && mini_clash=OFF || mini_clash=ON
|
||||||
[ -z "$network_check" ] && network_check=ON
|
[ -z "$network_check" ] && network_check=ON
|
||||||
comp_box "\033[30;47m启动设置菜单\033[0m"
|
comp_box "\033[30;47m$SETBOOT_TITLE\033[0m"
|
||||||
content_line "1) 开机自启动: \033[36m$(printf '%-4s' "$auto_set")\033[0m"
|
content_line "1) $SETBOOT_ITEM_AUTO \033[36m$(printf '%-4s' "$auto_set")\033[0m"
|
||||||
content_line "2) 使用保守模式: \033[36m$(printf '%-4s' "$start_old")\033[0m ———基于定时任务(每分钟检测)"
|
content_line "2) $SETBOOT_ITEM_OLD \033[36m$(printf '%-4s' "$start_old")\033[0m $SETBOOT_ITEM_OLD_DESC"
|
||||||
content_line "3) 设置自启延时: \033[36m$(printf '%-7s' "$delay")\033[0m ———用于解决自启后服务受限"
|
content_line "3) $SETBOOT_ITEM_DELAY \033[36m$(printf '%-7s' "$delay")\033[0m $SETBOOT_ITEM_DELAY_DESC"
|
||||||
content_line "4) 启用小闪存模式: \033[36m$(printf '%-4s' "$mini_clash")\033[0m ———用于闪存空间不足的设备"
|
content_line "4) $SETBOOT_ITEM_MINI \033[36m$(printf '%-4s' "$mini_clash")\033[0m $SETBOOT_ITEM_MINI_DESC"
|
||||||
[ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) 设置小闪存目录: \033[36m${BINDIR}\033[0m"
|
[ "${BINDIR}" != "$CRASHDIR" ] && content_line "5) $SETBOOT_ITEM_MINI_DIR \033[36m${BINDIR}\033[0m"
|
||||||
btm_box "6) 自启网络检查: \033[36m$(printf '%-4s' "$network_check")\033[0m ———禁用则跳过自启时网络检查" \
|
btm_box "6) $SETBOOT_ITEM_NETCHK \033[36m$(printf '%-4s' "$network_check")\033[0m $SETBOOT_ITEM_NETCHK_DESC" \
|
||||||
"7) 查看启动日志" \
|
"7) $SETBOOT_VIEW_LOG" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -57,11 +59,11 @@ setboot() {
|
|||||||
if check_autostart; then
|
if check_autostart; then
|
||||||
# 禁止自启动:删除各系统的启动项
|
# 禁止自启动:删除各系统的启动项
|
||||||
disable_autostart
|
disable_autostart
|
||||||
msg_alert "\033[33m已禁止ShellCrash开机自启动!\033[0m"
|
msg_alert "\033[33m$SETBOOT_AUTO_OFF\033[0m"
|
||||||
else
|
else
|
||||||
# 允许自启动:配置各系统的启动项
|
# 允许自启动:配置各系统的启动项
|
||||||
allow_autostart
|
allow_autostart
|
||||||
msg_alert "\033[32m已设置ShellCrash开机自启动!\033[0m"
|
msg_alert "\033[32m$SETBOOT_AUTO_ON\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
@@ -70,31 +72,31 @@ setboot() {
|
|||||||
start_old=ON
|
start_old=ON
|
||||||
setconfig start_old "$start_old"
|
setconfig start_old "$start_old"
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
msg_alert "\033[33m改为使用保守模式启动服务!\033[0m"
|
msg_alert "\033[33m$SETBOOT_OLDMODE_ON\033[0m"
|
||||||
else
|
else
|
||||||
if grep -qE 'procd|systemd|s6' /proc/1/comm || rc-status -r >/dev/null 2>&1; then
|
if grep -qE 'procd|systemd|s6' /proc/1/comm || rc-status -r >/dev/null 2>&1; then
|
||||||
"$CRASHDIR"/start.sh cronset "ShellCrash初始化"
|
"$CRASHDIR"/start.sh cronset "$SETBOOT_CRON_INIT"
|
||||||
start_old=OFF
|
start_old=OFF
|
||||||
setconfig start_old "$start_old"
|
setconfig start_old "$start_old"
|
||||||
"$CRASHDIR"/start.sh stop
|
"$CRASHDIR"/start.sh stop
|
||||||
msg_alert "\033[32m改为使用系统守护进程启动服务!\033[0m"
|
msg_alert "\033[32m$SETBOOT_OLDMODE_OFF\033[0m"
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m当前设备不支持以其他模式启动!\033[0m"
|
msg_alert "\033[31m$SETBOOT_MODE_UNSUPPORTED\033[0m"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
comp_box "\033[33m如果你的设备启动后可以正常使用,则无需设置!\033[0m" \
|
comp_box "\033[33m$SETBOOT_DELAY_HINT1\033[0m" \
|
||||||
"\033[36m推荐设置为30~120秒之间,请根据设备问题自行试验\033[0m"
|
"\033[36m$SETBOOT_DELAY_HINT2\033[0m"
|
||||||
read -r -p "请输入启动延迟时间(0~300秒)> " sec
|
read -r -p "$SETBOOT_DELAY_INPUT> " sec
|
||||||
case "$sec" in
|
case "$sec" in
|
||||||
[0-9] | [0-9][0-9] | [0-2][0-9][0-9] | 300)
|
[0-9] | [0-9][0-9] | [0-2][0-9][0-9] | 300)
|
||||||
start_delay=$sec
|
start_delay=$sec
|
||||||
setconfig start_delay "$sec"
|
setconfig start_delay "$sec"
|
||||||
msg_alert "\033[32m设置成功!\033[0m"
|
msg_alert "\033[32m$SETBOOT_SET_OK\033[0m"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
msg_alert "\033[31m输入有误,或超过300秒,请重新输入!\033[0m"
|
msg_alert "\033[31m$SETBOOT_DELAY_INVALID\033[0m"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
@@ -102,31 +104,31 @@ setboot() {
|
|||||||
dir_size=$(df "$CRASHDIR" | awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' | grep Ava | awk '{print $2}')
|
dir_size=$(df "$CRASHDIR" | awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' | grep Ava | awk '{print $2}')
|
||||||
if [ "$mini_clash" = "OFF" ]; then
|
if [ "$mini_clash" = "OFF" ]; then
|
||||||
if [ "$dir_size" -gt 20480 ]; then
|
if [ "$dir_size" -gt 20480 ]; then
|
||||||
msg_alert "\033[33m您的设备空间充足(>20M),无需开启!\033[0m"
|
msg_alert "\033[33m$SETBOOT_MINI_NEEDED_NO\033[0m"
|
||||||
elif [ "$start_old" != 'ON' ] && [ "$(cat /proc/1/comm)" = "systemd" ]; then
|
elif [ "$start_old" != 'ON' ] && [ "$(cat /proc/1/comm)" = "systemd" ]; then
|
||||||
msg_alert "\033[33m不支持systemd启动模式,请先启用保守模式!\033[0m"
|
msg_alert "\033[33m$SETBOOT_SYSTEMD_WARN\033[0m"
|
||||||
else
|
else
|
||||||
[ "$BINDIR" = "$CRASHDIR" ] && BINDIR="$TMPDIR"
|
[ "$BINDIR" = "$CRASHDIR" ] && BINDIR="$TMPDIR"
|
||||||
msg_alert "\033[32m已经启用小闪存功能!\033[0m" \
|
msg_alert "\033[32m$SETBOOT_MINI_ENABLED\033[0m" \
|
||||||
"如需更换目录,请使用【设置小闪存目录】功能\033[0m"
|
"$SETBOOT_MINI_DIR_HINT\033[0m"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
if [ "$dir_size" -lt 8192 ]; then
|
if [ "$dir_size" -lt 8192 ]; then
|
||||||
comp_box "\033[31m您的设备剩余空间不足8M,停用后可能无法正常运行!\033[0m" \
|
comp_box "\033[31m$SETBOOT_MINI_DISABLE_WARN\033[0m" \
|
||||||
"是否确认停用此功能?"
|
"$SETBOOT_MINI_DISABLE_CONFIRM"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SETBOOT_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SETBOOT_NO_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
BINDIR="$CRASHDIR"
|
BINDIR="$CRASHDIR"
|
||||||
msg_alert "\033[33m已经停用小闪存功能!\033[0m"
|
msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m"
|
||||||
else
|
else
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
rm -rf /tmp/ShellCrash
|
rm -rf /tmp/ShellCrash
|
||||||
BINDIR="$CRASHDIR"
|
BINDIR="$CRASHDIR"
|
||||||
msg_alert "\033[33m已经停用小闪存功能!\033[0m"
|
msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env
|
sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env
|
||||||
@@ -134,14 +136,14 @@ setboot() {
|
|||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[33m如设置到内存,则每次开机后都自动重新下载相关文件\033[0m" \
|
comp_box "\033[33m$SETBOOT_BINDIR_HINT1\033[0m" \
|
||||||
"\033[33m请确保安装源可用裸连,否则会导致启动失败\033[0m"
|
"\033[33m$SETBOOT_BINDIR_HINT2\033[0m"
|
||||||
btm_box "1) 使用内存(/tmp)" \
|
btm_box "1) $SETBOOT_BINDIR_TMP" \
|
||||||
"2) 选择U盘目录" \
|
"2) $SETBOOT_BINDIR_USB" \
|
||||||
"3) 自定义目录" \
|
"3) $SETBOOT_BINDIR_CUSTOM" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -152,21 +154,21 @@ setboot() {
|
|||||||
2)
|
2)
|
||||||
set_usb_dir() {
|
set_usb_dir() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "请选择安装目录:"
|
comp_box "$SETBOOT_SELECT_INSTALL_DIR"
|
||||||
du -hL /mnt |
|
du -hL /mnt |
|
||||||
awk '{print NR") "$2" (已占用的储存空间:"$1")"}' |
|
awk '{print NR") "$2" ($SETBOOT_SPACE_USED$1")"}' |
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "0) 返回上级菜单"
|
content_line "0) $COMMON_BACK"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||||
if [ "$num" = 0 ]; then
|
if [ "$num" = 0 ]; then
|
||||||
return 1
|
return 1
|
||||||
elif [ -z "$BINDIR" ]; then
|
elif [ -z "$BINDIR" ]; then
|
||||||
msg_alert "\033[31m输入错误!请重新设置!\033[0m"
|
msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m"
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -180,13 +182,13 @@ setboot() {
|
|||||||
3)
|
3)
|
||||||
input_dir() {
|
input_dir() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[36m请直接输入命令语句\033[0m" \
|
comp_box "\033[36m$SETBOOT_INPUT_CMD\033[0m" \
|
||||||
"或输入 0 返回上级菜单"
|
"$SETBOOT_INPUT_OR_BACK"
|
||||||
read -r -p "请输入> " BINDIR
|
read -r -p "$SETBOOT_INPUT> " BINDIR
|
||||||
if [ "$BINDIR" = 0 ]; then
|
if [ "$BINDIR" = 0 ]; then
|
||||||
return 1
|
return 1
|
||||||
elif [ ! -d "$BINDIR" ]; then
|
elif [ ! -d "$BINDIR" ]; then
|
||||||
msg_alert "\033[31m输入错误!请重新设置!\033[0m"
|
msg_alert "\033[31m$SETBOOT_INPUT_ERROR\033[0m"
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
done
|
done
|
||||||
@@ -206,19 +208,19 @@ setboot() {
|
|||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
comp_box "\033[33m如果你的设备启动后可以正常使用,则无需变更设置!\033[0m" \
|
comp_box "\033[33m$SETBOOT_NETCHK_HINT1\033[0m" \
|
||||||
"\033[36m禁用时,如果使用了小闪存模式或者rule-set等在线规则,则可能会因无法联网而导致启动失败!\033[0m" \
|
"\033[36m$SETBOOT_NETCHK_HINT2\033[0m" \
|
||||||
"\033[32m启用时,会导致部分性能较差或者拨号较慢的设备可能会因查询超时导致启动失败!\033[0m"
|
"\033[32m$SETBOOT_NETCHK_HINT3\033[0m"
|
||||||
|
|
||||||
if [ "$network_check" = "OFF" ]; then
|
if [ "$network_check" = "OFF" ]; then
|
||||||
content_line "当前\033[33m已禁用\033[0m自启网络检查,是否确认启用?"
|
content_line "$SETBOOT_NETCHK_OFF_CONFIRM"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已启用\033[0m自启网络检查,是否确认禁用?"
|
content_line "$SETBOOT_NETCHK_ON_CONFIRM"
|
||||||
fi
|
fi
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SETBOOT_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $SETBOOT_NO_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = '1' ]; then
|
if [ "$res" = '1' ]; then
|
||||||
if [ "$network_check" = "OFF" ]; then
|
if [ "$network_check" = "OFF" ]; then
|
||||||
network_check=ON
|
network_check=ON
|
||||||
@@ -236,12 +238,12 @@ setboot() {
|
|||||||
if [ -s "$TMPDIR"/ShellCrash.log ]; then
|
if [ -s "$TMPDIR"/ShellCrash.log ]; then
|
||||||
line_break
|
line_break
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
grep -v '任务' "$TMPDIR"/ShellCrash.log
|
grep -v "$SETBOOT_TASK_WORD" "$TMPDIR"/ShellCrash.log
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
line_break
|
line_break
|
||||||
exit
|
exit
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m未找到相关日志!\033[0m"
|
msg_alert "\033[31m$SETBOOT_LOG_NOT_FOUND\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
|||||||
@@ -15,16 +15,16 @@ set_cron() {
|
|||||||
[ -z "$week" ] && week=*
|
[ -z "$week" ] && week=*
|
||||||
[ -z "$hour" ] && hour=*
|
[ -z "$hour" ] && hour=*
|
||||||
[ -z "$min" ] && min=0
|
[ -z "$min" ] && min=0
|
||||||
comp_box "\033[33m$cron_time\033[0m执行任务:\033[36m$task_name\033[0m" \
|
comp_box "\033[33m$cron_time\033[0m$TASK5_RUN_TASK\033[36m$task_name\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"是否确认添加定时任务?"
|
"$TASK5_CONFIRM_ADD_CRON"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $TASK5_YES" \
|
||||||
"0) 否"
|
"0) $TASK5_NO"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = '1' ]; then
|
if [ "$res" = '1' ]; then
|
||||||
task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name"
|
task_txt="$min $hour * * $week $CRASHDIR/task/task.sh $task_id $cron_time$task_name"
|
||||||
cronset "$cron_time$task_name" "$task_txt"
|
cronset "$cron_time$task_name" "$task_txt"
|
||||||
msg_alert -t 0 "任务【$cron_time$task_name】\033[32m已添加!\033[0m"
|
msg_alert -t 0 "$TASK5_TASK_PREFIX$cron_time$task_name$TASK5_TASK_ADDED"
|
||||||
fi
|
fi
|
||||||
unset week hour min
|
unset week hour min
|
||||||
sleep 1
|
sleep 1
|
||||||
@@ -51,28 +51,28 @@ set_service() {
|
|||||||
# 自定义命令添加
|
# 自定义命令添加
|
||||||
task_user_add() {
|
task_user_add() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[33m命令可包含空格,请确保命令可执行!\033[0m" \
|
comp_box "\033[33m$TASK5_USER_ADD_HINT1\033[0m" \
|
||||||
"\033[36m请勿附带执行条件,执行条件请在命令添加完成后再返回设置!\033[0m" \
|
"\033[36m$TASK5_USER_ADD_HINT2\033[0m" \
|
||||||
"亦可手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m以添加命令"
|
"$TASK5_USER_ADD_HINT3\033[32m${CRASHDIR}/task/task.user\033[0m$TASK5_USER_ADD_HINT4"
|
||||||
btm_box "\033[36m请直接输入命令语句\033[0m" \
|
btm_box "\033[36m$TASK5_INPUT_CMD\033[0m" \
|
||||||
"或输入 0 返回上级菜单"
|
"$TASK5_OR_BACK"
|
||||||
read -r -p "请输入> " script
|
read -r -p "$TASK5_INPUT> " script
|
||||||
if [ "$script" = 0 ]; then
|
if [ "$script" = 0 ]; then
|
||||||
break
|
break
|
||||||
elif [ -n "$script" ]; then
|
elif [ -n "$script" ]; then
|
||||||
task_command=$script
|
task_command=$script
|
||||||
comp_box "请检查输入:\033[32m$task_command\033[0m"
|
comp_box "$TASK5_CHECK_INPUT\033[32m$task_command\033[0m"
|
||||||
# 获取本任务ID
|
# 获取本任务ID
|
||||||
task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1)
|
task_max_id=$(awk -F '#' '{print $1}' "$CRASHDIR"/task/task.user 2>/dev/null | sort -n | tail -n 1)
|
||||||
[ -z "$task_max_id" ] && task_max_id=200
|
[ -z "$task_max_id" ] && task_max_id=200
|
||||||
task_id=$((task_max_id + 1))
|
task_id=$((task_max_id + 1))
|
||||||
read -r -p "请输入任务备注> " txt
|
read -r -p "$TASK5_INPUT_REMARK> " txt
|
||||||
[ -n "$txt" ] && task_name=$txt || task_name=自定义任务$task_id
|
[ -n "$txt" ] && task_name=$txt || task_name="$TASK5_CUSTOM_TASK$task_id"
|
||||||
echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user
|
echo "$task_id#$task_command#$task_name" >>"$CRASHDIR"/task/task.user
|
||||||
msg_alert "\033[32m自定义任务已添加!\033[0m"
|
msg_alert "\033[32m$TASK5_CUSTOM_ADDED\033[0m"
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
|
msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -81,26 +81,26 @@ task_user_add() {
|
|||||||
task_user_del() {
|
task_user_del() {
|
||||||
while true; do
|
while true; do
|
||||||
if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then
|
if grep -Evq '^#' "$CRASHDIR/task/task.user" 2>/dev/null; then
|
||||||
comp_box "请输入对应ID移除对应自定义任务(不会影响内置任务)" \
|
comp_box "$TASK5_USER_DEL_HINT1" \
|
||||||
"也可以手动编辑\033[32m${CRASHDIR}/task/task.user\033[0m"
|
"$TASK5_USER_DEL_HINT2\033[32m${CRASHDIR}/task/task.user\033[0m"
|
||||||
grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null |
|
grep -Ev '^#' "$CRASHDIR/task/task.user" 2>/dev/null |
|
||||||
awk -F '#' '{print $1") "$3}' |
|
awk -F '#' '{print $1") "$3}' |
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ "$num" = 0 ]; then
|
if [ "$num" = 0 ]; then
|
||||||
break
|
break
|
||||||
elif [ -n "$num" ]; then
|
elif [ -n "$num" ]; then
|
||||||
sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null
|
sed -i "/^$num#/d" "$CRASHDIR"/task/task.user 2>/dev/null
|
||||||
common_success
|
common_success
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m输入错误,请重新输入!\033[0m"
|
msg_alert "\033[31m$TASK5_INPUT_ERROR\033[0m"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m你暂未添加任何自定义任务\033[0m"
|
msg_alert "\033[33m$TASK5_NO_CUSTOM_TASK\033[0m"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -109,13 +109,13 @@ task_user_del() {
|
|||||||
# 任务添加
|
# 任务添加
|
||||||
task_add() {
|
task_add() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[36m请选择需要添加的任务:\033[0m"
|
comp_box "\033[36m$TASK5_SELECT_ADD\033[0m"
|
||||||
# 输出任务列表
|
# 输出任务列表
|
||||||
list=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}')
|
list=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep -Ev '^(#|$)' | awk -F '#' '{print $3}')
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
break
|
break
|
||||||
@@ -151,87 +151,87 @@ task_del() {
|
|||||||
|
|
||||||
# 任务条件选择菜单
|
# 任务条件选择菜单
|
||||||
task_type() {
|
task_type() {
|
||||||
comp_box "请选择任务\033[36m【$task_name】\033[0m执行条件:"
|
comp_box "$TASK5_SELECT_COND\033[36m【$task_name】\033[0m$TASK5_SELECT_COND2"
|
||||||
btm_box "1) 定时任务\033[32m每周执行\033[0m" \
|
btm_box "1) $TASK5_COND_1" \
|
||||||
"2) 定时任务\033[32m每日执行\033[0m" \
|
"2) $TASK5_COND_2" \
|
||||||
"3) 定时任务\033[32m每小时执行\033[0m" \
|
"3) $TASK5_COND_3" \
|
||||||
"4) 定时任务\033[32m每分钟执行\033[0m" \
|
"4) $TASK5_COND_4" \
|
||||||
" - - - - - - - - -\033[31m注意\033[0m- - - - - - - - -" \
|
"$TASK5_WARN_LINE1" \
|
||||||
" 逻辑水平不及格的请勿使用下方触发条件!" \
|
"$TASK5_WARN_LINE2" \
|
||||||
" - - - - - - - - - - - - - - - - - - - -" \
|
"$TASK5_WARN_LINE3" \
|
||||||
"5) 服务\033[33m启动前执行\033[0m" \
|
"5) $TASK5_COND_5" \
|
||||||
"6) 服务\033[33m启动后执行\033[0m" \
|
"6) $TASK5_COND_6" \
|
||||||
"7) 服务\033[33m运行时每分钟执行\033[0m" \
|
"7) $TASK5_COND_7" \
|
||||||
"8) 防火墙服务\033[33m重启后执行\033[0m" \
|
"8) $TASK5_COND_8" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
|
|
||||||
comp_box "输入 1~7 对应\033[33m每周的指定某天\033[0m运行(7=周日)" \
|
comp_box "$TASK5_WEEK_HINT1" \
|
||||||
"输入 1,4,0 代表\033[36m每周一、周四、周日\033[0m运行" \
|
"$TASK5_WEEK_HINT2" \
|
||||||
"输入 1~5 代表\033[36m周一至周五\033[0m运行"
|
"$TASK5_WEEK_HINT3"
|
||||||
read -r -p "在每周哪天执行?> " week
|
read -r -p "$TASK5_WEEK_INPUT> " week
|
||||||
# week=`echo ${week/7/0}` # 把7换成0
|
# week=`echo ${week/7/0}` # 把7换成0
|
||||||
read -r -p "想在该日的具体哪个小时执行?(0~23)> " hour
|
read -r -p "$TASK5_HOUR_INPUT1> " hour
|
||||||
cron_time="在每周$week的$hour点整"
|
cron_time="$TASK5_CRON_WEEK$week$TASK5_CRON_WEEK2$hour$TASK5_OCLOCK"
|
||||||
# cron_time=`echo ${cron_time/周0/周日}` # 把0换成日
|
# cron_time=`echo ${cron_time/周0/周日}` # 把0换成日
|
||||||
[ -n "$week" ] && [ -n "$hour" ] && set_cron
|
[ -n "$week" ] && [ -n "$hour" ] && set_cron
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
comp_box "输入 1,7,15 代表\033[36m每到1,7,15点\033[0m运行" \
|
comp_box "$TASK5_DAY_HINT1" \
|
||||||
"输入 6~18 代表\033[36m早6点至晚18点间每小时\033[0m运行"
|
"$TASK5_DAY_HINT2"
|
||||||
read -r -p "想在每日的具体哪个小时执行?(0~23)> " hour
|
read -r -p "$TASK5_HOUR_INPUT2> " hour
|
||||||
read -r -p "想在具体哪分钟执行?(0~59的整数)> " min
|
read -r -p "$TASK5_MIN_INPUT> " min
|
||||||
cron_time="在每日的$hour点$min分"
|
cron_time="$TASK5_CRON_DAY$hour$TASK5_POINT$min$TASK5_MINUTE"
|
||||||
[ -n "$min" ] && [ -n "$hour" ] && set_cron
|
[ -n "$min" ] && [ -n "$hour" ] && set_cron
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "想每隔多少小时执行一次?(1~23的整数)> " num
|
read -r -p "$TASK5_EVERY_HOUR_INPUT> " num
|
||||||
hour="*/$num"
|
hour="*/$num"
|
||||||
cron_time="每隔$num小时"
|
cron_time="$TASK5_EVERY$num$TASK5_HOUR"
|
||||||
[ -n "$hour" ] && set_cron
|
[ -n "$hour" ] && set_cron
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "想每隔多少分钟执行一次?(1~59的整数)> " num
|
read -r -p "$TASK5_EVERY_MIN_INPUT> " num
|
||||||
min="*/$num"
|
min="*/$num"
|
||||||
cron_time="每隔$num分钟"
|
cron_time="$TASK5_EVERY$num$TASK5_MIN"
|
||||||
[ -n "$min" ] && set_cron
|
[ -n "$min" ] && set_cron
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
set_service bfstart "$task_id" "服务启动前$task_name"
|
set_service bfstart "$task_id" "$TASK5_BFSTART$task_name"
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
set_service afstart "$task_id" "服务启动后$task_name"
|
set_service afstart "$task_id" "$TASK5_AFSTART$task_name"
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
comp_box "输入10即每隔10分钟运行一次,1440即每隔24小时运行一次" \
|
comp_box "$TASK5_RUNNING_HINT1" \
|
||||||
"大于60分钟的数值将按小时取整,且按当前时区记时"
|
"$TASK5_RUNNING_HINT2"
|
||||||
read -r -p "想每隔多少分钟执行一次?(1~1440的整数)> " num
|
read -r -p "$TASK5_RUNNING_INPUT> " num
|
||||||
if [ "$num" -lt 60 ]; then
|
if [ "$num" -lt 60 ]; then
|
||||||
min="$num"
|
min="$num"
|
||||||
cron_time="*/$min * * * *"
|
cron_time="*/$min * * * *"
|
||||||
time_des="$min分钟"
|
time_des="$min$TASK5_MIN"
|
||||||
else
|
else
|
||||||
hour="$((num / 60))"
|
hour="$((num / 60))"
|
||||||
cron_time="0 */$hour * * *"
|
cron_time="0 */$hour * * *"
|
||||||
time_des="$hour小时"
|
time_des="$hour$TASK5_HOUR"
|
||||||
fi
|
fi
|
||||||
[ -n "$cron_time" ] && set_service running "$task_id" "运行时每$time_des$task_name" "$cron_time"
|
[ -n "$cron_time" ] && set_service running "$task_id" "$TASK5_RUNNING_PREFIX$time_des$task_name" "$cron_time"
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
comp_box "该功能会将相关启动代码注入到/etc/init.d/firewall中"
|
comp_box "$TASK5_AFFW_HINT"
|
||||||
"是否确认继续?"
|
"$TASK5_CONFIRM_CONTINUE"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $TASK5_YES" \
|
||||||
"0) 否"
|
"0) $TASK5_NO"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = 1 ] && set_service affirewall "$task_id" "防火墙重启后$task_name"
|
[ "$res" = 1 ] && set_service affirewall "$task_id" "$TASK5_AFFW_PREFIX$task_name"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
errornum
|
errornum
|
||||||
@@ -246,43 +246,43 @@ task_manager() {
|
|||||||
cronload >"$TMPDIR"/task_cronlist
|
cronload >"$TMPDIR"/task_cronlist
|
||||||
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list
|
cat "$TMPDIR"/task_cronlist "$CRASHDIR"/task/running 2>/dev/null | sort -u | grep -oE "task/task.sh .*" | cut -d ' ' -f 2- >"$TMPDIR"/task_list
|
||||||
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list
|
cat "$CRASHDIR"/task/bfstart "$CRASHDIR"/task/afstart "$CRASHDIR"/task/affirewall 2>/dev/null | cut -d ' ' -f 2- >>"$TMPDIR"/task_list
|
||||||
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "守护" | awk -F '#' '{print "0 旧版任务-"$2}' >>"$TMPDIR"/task_list
|
cat "$TMPDIR"/task_cronlist 2>/dev/null | sort -u | grep -oE " #.*" | grep -v "$TASK5_GUARD_WORD" | awk -F '#' '{print "0 '$TASK5_OLD_PREFIX'"$2}' >>"$TMPDIR"/task_list
|
||||||
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
sed -i '/^ *$/d' "$TMPDIR"/task_list
|
||||||
rm -rf "$TMPDIR"/task_cronlist
|
rm -rf "$TMPDIR"/task_cronlist
|
||||||
# 判断为空则返回
|
# 判断为空则返回
|
||||||
if [ ! -s "$TMPDIR"/task_list ]; then
|
if [ ! -s "$TMPDIR"/task_list ]; then
|
||||||
msg_alert "\033[31m当前没有可供管理的任务!\033[36m"
|
msg_alert "\033[31m$TASK5_NONE_TO_MANAGE\033[36m"
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
comp_box "\033[33m已添加的任务:\033[0m"
|
comp_box "\033[33m$TASK5_ADDED_TASKS\033[0m"
|
||||||
list_box "$(cat "$TMPDIR"/task_list)"
|
list_box "$(cat "$TMPDIR"/task_list)"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
btm_box "a) 清空旧版任务" \
|
btm_box "a) $TASK5_CLEAR_OLD" \
|
||||||
"d) 清空任务列表" \
|
"d) $TASK5_CLEAR_ALL" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
task_del "#"
|
task_del "#"
|
||||||
msg_alert "\033[31m旧版任务已清空!\033[36m"
|
msg_alert "\033[31m$TASK5_OLD_CLEARED\033[36m"
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
task_del "task.sh"
|
task_del "task.sh"
|
||||||
msg_alert "\033[31m全部任务已清空!\033[36m"
|
msg_alert "\033[31m$TASK5_ALL_CLEARED\033[36m"
|
||||||
;;
|
;;
|
||||||
[1-9] | [1-9][0-9])
|
[1-9] | [1-9][0-9])
|
||||||
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
task_txt=$(sed -n "$num p" "$TMPDIR"/task_list)
|
||||||
task_id=$(echo "$task_txt" | awk '{print $1}')
|
task_id=$(echo "$task_txt" | awk '{print $1}')
|
||||||
|
|
||||||
if [ "$task_id" = 0 ]; then
|
if [ "$task_id" = 0 ]; then
|
||||||
comp_box "旧版任务不支持管理,是否移除?"
|
comp_box "$TASK5_OLD_NOT_SUPPORT"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $TASK5_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $TASK5_NO_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
cronname=$(echo "$task_txt" | awk -F '-' '{print $2}')
|
cronname=$(echo "$task_txt" | awk -F '-' '{print $2}')
|
||||||
cronset "$cronname"
|
cronset "$cronname"
|
||||||
@@ -293,14 +293,14 @@ task_manager() {
|
|||||||
else
|
else
|
||||||
task_des=$(echo "$task_txt" | awk '{print $2}')
|
task_des=$(echo "$task_txt" | awk '{print $2}')
|
||||||
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
|
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $3}')
|
||||||
comp_box "当前任务为:\033[36m$task_des\033[0m"
|
comp_box "$TASK5_CURRENT_TASK\033[36m$task_des\033[0m"
|
||||||
btm_box "1) \033[33m修改\033[0m当前任务" \
|
btm_box "1) $TASK5_EDIT_TASK" \
|
||||||
"2) \033[31m删除\033[0m当前任务" \
|
"2) $TASK5_DEL_TASK" \
|
||||||
"3) \033[32m立即执行\033[0m一次" \
|
"3) $TASK5_RUN_ONCE" \
|
||||||
"4) 查看\033[33m执行记录\033[0m" \
|
"4) $TASK5_VIEW_RECORD" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
continue
|
continue
|
||||||
@@ -314,8 +314,8 @@ task_manager() {
|
|||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$task_id" | awk -F '#' '{print $2}')
|
||||||
eval "$task_command" && task_res='执行成功!' || task_res='执行失败!'
|
eval "$task_command" && task_res="$TASK5_RUN_OK" || task_res="$TASK5_RUN_FAIL"
|
||||||
msg_alert "\033[33m任务【$task_des】$task_res\033[0m"
|
msg_alert "\033[33m$TASK5_TASK_PREFIX$task_des】$task_res\033[0m"
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
if cat "$TMPDIR"/ShellCrash.log | grep -q "$task_name"; then
|
if cat "$TMPDIR"/ShellCrash.log | grep -q "$task_name"; then
|
||||||
@@ -324,7 +324,7 @@ task_manager() {
|
|||||||
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
cat "$TMPDIR"/ShellCrash.log | grep "$task_name"
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m未找到相关执行记录!\033[0m"
|
msg_alert "\033[31m$TASK5_RECORD_NOT_FOUND\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -348,8 +348,8 @@ task_recom() {
|
|||||||
"$TASK_RECOM_ITEM_1" \
|
"$TASK_RECOM_ITEM_1" \
|
||||||
"$TASK_RECOM_ITEM_2" \
|
"$TASK_RECOM_ITEM_2" \
|
||||||
"$TASK_RECOM_ITEM_3"
|
"$TASK_RECOM_ITEM_3"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $TASK5_YES" \
|
||||||
"0) 否"
|
"0) $TASK5_NO"
|
||||||
read -r -p "$COMMON_INPUT>" res
|
read -r -p "$COMMON_INPUT>" res
|
||||||
|
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
@@ -367,18 +367,18 @@ task_recom() {
|
|||||||
task_menu() {
|
task_menu() {
|
||||||
while true; do
|
while true; do
|
||||||
# 检测并创建自定义任务文件
|
# 检测并创建自定义任务文件
|
||||||
[ -f "$CRASHDIR"/task/task.user ] || echo '#任务ID(必须>200并顺序排列)#任务命令#任务说明(#号隔开,任务命令和说明中都不允许包含#号)' >"$CRASHDIR"/task/task.user
|
[ -f "$CRASHDIR"/task/task.user ] || echo "$TASK5_USER_FILE_HEADER" >"$CRASHDIR"/task/task.user
|
||||||
comp_box "\033[30;47m自动任务菜单\033[0m"
|
comp_box "\033[30;47m$TASK5_MENU_TITLE\033[0m"
|
||||||
btm_box "1) 添加\033[32m自动任务\033[0m" \
|
btm_box "1) $TASK5_MENU_1" \
|
||||||
"2) 管理\033[33m任务列表\033[0m" \
|
"2) $TASK5_MENU_2" \
|
||||||
"3) 查看\033[36m任务日志\033[0m" \
|
"3) $TASK5_MENU_3" \
|
||||||
"4) 配置\033[36m日志推送\033[0m" \
|
"4) $TASK5_MENU_4" \
|
||||||
"5) 添加\033[33m自定义任务\033[0m" \
|
"5) $TASK5_MENU_5" \
|
||||||
"6) 删除\033[33m自定义任务\033[0m" \
|
"6) $TASK5_MENU_6" \
|
||||||
"7) 使用\033[32m推荐设置\033[0m" \
|
"7) $TASK5_MENU_7" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -391,17 +391,17 @@ task_menu() {
|
|||||||
rm -rf "$TMPDIR"/task_list
|
rm -rf "$TMPDIR"/task_list
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
if cat "$TMPDIR"/ShellCrash.log | grep -q '任务【'; then
|
if cat "$TMPDIR"/ShellCrash.log | grep -q "$TASK5_TASK_GREP"; then
|
||||||
line_break
|
line_break
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
cat "$TMPDIR"/ShellCrash.log | grep '任务【'
|
cat "$TMPDIR"/ShellCrash.log | grep "$TASK5_TASK_GREP"
|
||||||
echo "==========================================================="
|
echo "==========================================================="
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m未找到任务相关执行日志!\033[0m"
|
msg_alert "\033[31m$TASK5_LOG_NOT_FOUND\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
msg_alert "\033[36m请在日志工具中配置相关推送通道及推送开关\033[0m"
|
msg_alert "\033[36m$TASK5_PUSH_HINT\033[0m"
|
||||||
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
. "$CRASHDIR"/menus/8_tools.sh && log_pusher
|
||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_MODULE_6_CORECONFIG_LOADED" ] && return
|
[ -n "$__IS_MODULE_6_CORECONFIG_LOADED" ] && return
|
||||||
__IS_MODULE_6_CORECONFIG_LOADED=1
|
__IS_MODULE_6_CORECONFIG_LOADED=1
|
||||||
|
|
||||||
|
load_lang 6_core_config
|
||||||
|
|
||||||
if echo "$crashcore" | grep -q 'singbox'; then
|
if echo "$crashcore" | grep -q 'singbox'; then
|
||||||
CONFIG_PATH="$CRASHDIR"/jsons/config.json
|
CONFIG_PATH="$CRASHDIR"/jsons/config.json
|
||||||
CORE_TYPE=singbox
|
CORE_TYPE=singbox
|
||||||
@@ -27,18 +29,18 @@ set_core_config() {
|
|||||||
f2 = substr(f2, 1, 30) "..."
|
f2 = substr(f2, 1, 30) "..."
|
||||||
printf "%-7s \t%-28s\n", f1, f2
|
printf "%-7s \t%-28s\n", f1, f2
|
||||||
}')
|
}')
|
||||||
comp_box "\033[30;47m配置文件管理\033[0m"
|
comp_box "\033[30;47m$CORECFG_TITLE\033[0m"
|
||||||
[ -n "$list" ] && {
|
[ -n "$list" ] && {
|
||||||
content_line "\033[36m输入数字可管理对应提供者\033[0m"
|
content_line "\033[36m$CORECFG_HINT_SELECT_PROVIDER\033[0m"
|
||||||
content_line ""
|
content_line ""
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
}
|
}
|
||||||
btm_box "a) \033[32m添加提供者\033[0m(支持订阅/分享链接及本地文件)" \
|
btm_box "a) $CORECFG_MENU_A" \
|
||||||
"b) \033[36m本地生成配置文件\033[0m" \
|
"b) $CORECFG_MENU_B" \
|
||||||
"c) \033[33m在线生成配置文件\033[0m" \
|
"c) $CORECFG_MENU_C" \
|
||||||
"d) \033[31m清空提供者列表\033[0m" \
|
"d) $CORECFG_MENU_D" \
|
||||||
"e) \033[36m自定义配置文件\033[0m" \
|
"e) $CORECFG_MENU_E" \
|
||||||
"" \
|
"" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT_L> " num
|
read -r -p "$COMMON_INPUT_L> " num
|
||||||
@@ -59,10 +61,10 @@ set_core_config() {
|
|||||||
. "$CRASHDIR"/menus/providers.sh
|
. "$CRASHDIR"/menus/providers.sh
|
||||||
providers
|
providers
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m仅限Mihomo/singboxr内核使用,请更换内核!\033[0m"
|
msg_alert "\033[33m$CORECFG_CORE_ONLY\033[0m"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_alert "请先添加提供者!"
|
msg_alert "$CORECFG_ADD_PROVIDER_FIRST"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
@@ -70,15 +72,15 @@ set_core_config() {
|
|||||||
. "$CRASHDIR"/menus/subconverter.sh
|
. "$CRASHDIR"/menus/subconverter.sh
|
||||||
subconverter
|
subconverter
|
||||||
else
|
else
|
||||||
msg_alert "请先添加提供者!"
|
msg_alert "$CORECFG_ADD_PROVIDER_FIRST"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
comp_box "\033[33m警告:这将删除所有提供者且无法还原!\033[0m" \
|
comp_box "\033[33m$CORECFG_CLEAR_WARN\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"是否确认清空提供者列表:"
|
"$CORECFG_CLEAR_CONFIRM"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $CORECFG_YES" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $CORECFG_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
rm -f "$CRASHDIR"/configs/providers.cfg
|
rm -f "$CRASHDIR"/configs/providers.cfg
|
||||||
@@ -130,38 +132,38 @@ setproviders() {
|
|||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
link_info=$(echo "$link$link_uri" | cut -c 1-30)
|
link_info=$(echo "$link$link_uri" | cut -c 1-30)
|
||||||
comp_box "\033[36m支持添加订阅链接/分享链接/本地文件作为提供者\033[0m"
|
comp_box "\033[36m$CORECFG_PROVIDER_SUPPORT\033[0m"
|
||||||
|
|
||||||
content_line "1) 设置\033[36m名称或代号\033[0m \033[32m$name\033[0m"
|
content_line "1) $CORECFG_SET_NAME \033[32m$name\033[0m"
|
||||||
content_line "2) 设置\033[32m链接或路径\033[0m: \033[36m$link_info\033[0m"
|
content_line "2) $CORECFG_SET_LINK \033[36m$link_info\033[0m"
|
||||||
[ -n "$link" ] &&
|
[ -n "$link" ] &&
|
||||||
content_line "3) 设置\033[33m本地生成覆写\033[0m"
|
content_line "3) $CORECFG_SET_OVERRIDE"
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "a) \033[36m保存此提供者\033[0m"
|
content_line "a) $CORECFG_SAVE_PROVIDER"
|
||||||
content_line "d) \033[31m删除此提供者\033[0m"
|
content_line "d) $CORECFG_DEL_PROVIDER"
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "\033[36m以下方式的详细配置请前往对应功能页面进行设置!\033[0m"
|
content_line "\033[36m$CORECFG_MORE_CONFIG_HINT\033[0m"
|
||||||
[ -n "$link" ] &&
|
[ -n "$link" ] &&
|
||||||
content_line "b) \033[32m本地生成\033[0m仅包含此提供者的配置文件"
|
content_line "b) $CORECFG_GEN_LOCAL_ONE"
|
||||||
echo "$link$link_uri" | grep -q '://' &&
|
echo "$link$link_uri" | grep -q '://' &&
|
||||||
content_line "c) \033[33m在线生成\033[0m仅包含此提供者的配置文件"
|
content_line "c) $CORECFG_GEN_ONLINE_ONE"
|
||||||
echo "$link" | grep -q '^http' &&
|
echo "$link" | grep -q '^http' &&
|
||||||
content_line "e) 在线获取此配置文件(不使用订阅转换)"
|
content_line "e) $CORECFG_GET_ONLINE_DIRECT"
|
||||||
echo "$link" | grep -q '^./providers' &&
|
echo "$link" | grep -q '^./providers' &&
|
||||||
content_line "e) 直接使用此文件作为配置文件(不使用本地生成)"
|
content_line "e) $CORECFG_USE_DIRECT"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应字母或数字> " input
|
read -r -p "$CORECFG_INPUT_ALNUM> " input
|
||||||
case "$input" in
|
case "$input" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[33m注意:\n名称或代号不可重复,不支持纯数字,且不要超过4个汉字!\033[0m"
|
comp_box "\033[33m$CORECFG_NAME_HINT\033[0m"
|
||||||
btm_box "\033[36m请直接输入具体名称或代号\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_NAME\033[0m" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " text
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
text=$(printf "%.12s" "$text" | sed 's/ //g') # 截断12字符+去空格
|
text=$(printf "%.12s" "$text" | sed 's/ //g') # 截断12字符+去空格
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
break
|
break
|
||||||
@@ -176,13 +178,13 @@ setproviders() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[33m订阅链接\033[0m:\nhttps/http开头的clash配置文件订阅链接" \
|
comp_box "$CORECFG_LINK_HINT1" \
|
||||||
"" \
|
"" \
|
||||||
"\033[36m分享链接\033[0m:\n$URI_EXP" \
|
"$CORECFG_LINK_HINT2\n$URI_EXP" \
|
||||||
"" \
|
"" \
|
||||||
"\033[33m本地文件\033[0m:\n必须放在\033[32m$CRASHDIR/providers\033[0m目录下" \
|
"$CORECFG_LINK_HINT3\033[32m$CRASHDIR/providers\033[0m$CORECFG_LINK_HINT4" \
|
||||||
"" \
|
"" \
|
||||||
"\033[36mBase64 \033[0m:\n请直接写入本地文件"
|
"$CORECFG_LINK_HINT5"
|
||||||
list=$(
|
list=$(
|
||||||
for f in "$CRASHDIR"/providers/*; do
|
for f in "$CRASHDIR"/providers/*; do
|
||||||
[ "$f" = "$CRASHDIR"/providers/uri_group ] && continue
|
[ "$f" = "$CRASHDIR"/providers/uri_group ] && continue
|
||||||
@@ -193,12 +195,12 @@ setproviders() {
|
|||||||
if [ -n "$list" ]; then
|
if [ -n "$list" ]; then
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"输入 0 返回上级菜单"
|
"$CORECFG_INPUT0_BACK"
|
||||||
read -r -p "请选择对应文件或输入具体链接> " text
|
read -r -p "$CORECFG_SELECT_FILE_OR_LINK> " text
|
||||||
else
|
else
|
||||||
btm_box "\033[36m请直接输入具体链接\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_LINK\033[0m" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " text
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
fi
|
fi
|
||||||
text=$(echo "$text" | sed 's/ //g') # 去空格
|
text=$(echo "$text" | sed 's/ //g') # 去空格
|
||||||
case "$text" in
|
case "$text" in
|
||||||
@@ -254,7 +256,7 @@ setproviders() {
|
|||||||
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
||||||
gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w"
|
gen_providers "$name" "$link" "$interval" "$interval2" "$ua" "#$exclude_w" "#$include_w"
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m$请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
@@ -268,7 +270,7 @@ setproviders() {
|
|||||||
# 获取在线文件
|
# 获取在线文件
|
||||||
jump_core_config
|
jump_core_config
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
@@ -283,10 +285,10 @@ setproviders() {
|
|||||||
;;
|
;;
|
||||||
e)
|
e)
|
||||||
if [ -n "$link" ]; then
|
if [ -n "$link" ]; then
|
||||||
comp_box "\033[31m注意:\n此功能不兼容“跳过证书验证”功能\033[0m" \
|
comp_box "\033[31m$CORECFG_DANGER1\033[0m" \
|
||||||
"\033[31m请确认你完全理解自己在做什么\033[0m"
|
"\033[31m$CORECFG_DANGER2\033[0m"
|
||||||
btm_box "1) 我确认遇到问题可以自行解决" \
|
btm_box "1) $CORECFG_DANGER_CONFIRM" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = "1" ] && {
|
[ "$res" = "1" ] && {
|
||||||
file=$(echo "$CRASHDIR/$link" | sed 's|\./||')
|
file=$(echo "$CRASHDIR/$link" | sed 's|\./||')
|
||||||
@@ -305,11 +307,11 @@ setproviders() {
|
|||||||
jump_core_config
|
jump_core_config
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -332,7 +334,7 @@ saveproviders() {
|
|||||||
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
|
echo "$name $link_uri" >>"$CRASHDIR"/configs/providers_uri.cfg
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m请先完成必填选项!\033[0m"
|
msg_alert "\033[31m$CORECFG_FILL_REQUIRED\033[0m"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -340,26 +342,26 @@ saveproviders() {
|
|||||||
# 本地生成覆写
|
# 本地生成覆写
|
||||||
custproviders() {
|
custproviders() {
|
||||||
while true; do
|
while true; do
|
||||||
top_box "1) 设置\033[33m健康检查间隔\033[0m:\t\033[47;30m$interval\033[0m 分钟" \
|
top_box "1) $CORECFG_INTERVAL1\033[47;30m$interval\033[0m $CORECFG_MIN" \
|
||||||
"2) 设置\033[36m自动更新间隔\033[0m:\t\033[47;30m$interval2\033[0m 小时"
|
"2) $CORECFG_INTERVAL2\033[47;30m$interval2\033[0m $CORECFG_HOUR"
|
||||||
echo "$link" | grep -q '^http' &&
|
echo "$link" | grep -q '^http' &&
|
||||||
content_line "3) 设置\033[33m虚拟浏览器UA\033[0m:\t\033[47;30m$ua\033[0m"
|
content_line "3) $CORECFG_SET_UA\033[47;30m$ua\033[0m"
|
||||||
btm_box "4) 设置\033[31m排除节点正则\033[0m:\t\033[47;30m$exclude_w\033[0m" \
|
btm_box "4) $CORECFG_SET_EXCLUDE\033[47;30m$exclude_w\033[0m" \
|
||||||
"5) 设置\033[32m包含节点正则\033[0m:\t\033[47;30m$include_w\033[0m" \
|
"5) $CORECFG_SET_INCLUDE\033[47;30m$include_w\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "当前健康检查间隔:$interval 分钟"
|
comp_box "$CORECFG_CUR_INTERVAL$interval $CORECFG_MIN"
|
||||||
btm_box "\033[36m请直接健康检查间隔(单位:分钟)\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_INTERVAL1\033[0m" \
|
||||||
"或输入 r 重置健康检查间隔为默认值(3 分钟)" \
|
"$CORECFG_RESET_INTERVAL1" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " num
|
read -r -p "$CORECFG_INPUT> " num
|
||||||
if [ "$num" = "r" ]; then
|
if [ "$num" = "r" ]; then
|
||||||
interval=3
|
interval=3
|
||||||
elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then
|
elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then
|
||||||
@@ -374,11 +376,11 @@ custproviders() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "当前健康检查间隔:$interval 分钟"
|
comp_box "$CORECFG_CUR_INTERVAL$interval $CORECFG_MIN"
|
||||||
btm_box "\033[36m请直接输入自动更新间隔(单位:小时)\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_INTERVAL2\033[0m" \
|
||||||
"或输入 r 重置自动更新间隔为默认值(12 小时)" \
|
"$CORECFG_RESET_INTERVAL2" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " num
|
read -r -p "$CORECFG_INPUT> " num
|
||||||
if [ "$num" = "r" ]; then
|
if [ "$num" = "r" ]; then
|
||||||
interval2=12
|
interval2=12
|
||||||
elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then
|
elif [ -n "$num" ] && [ "$num" -eq "$num" ] 2>/dev/null; then
|
||||||
@@ -393,14 +395,14 @@ custproviders() {
|
|||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
if [ -z "$ua" ]; then
|
if [ -z "$ua" ]; then
|
||||||
comp_box "当前浏览器UA:无"
|
comp_box "$CORECFG_CUR_UA_NONE"
|
||||||
else
|
else
|
||||||
comp_box "当前浏览器UA:$ua"
|
comp_box "$CORECFG_CUR_UA$ua"
|
||||||
fi
|
fi
|
||||||
btm_box "\033[36m请直接输入浏览器UA\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_UA\033[0m" \
|
||||||
"或输入 r 重置浏览器UA为默认值(clash.meta)" \
|
"$CORECFG_RESET_UA" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " text
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
case "$text" in
|
case "$text" in
|
||||||
0)
|
0)
|
||||||
continue
|
continue
|
||||||
@@ -416,15 +418,15 @@ custproviders() {
|
|||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
if [ -z "$exclude_w" ]; then
|
if [ -z "$exclude_w" ]; then
|
||||||
comp_box "当前排除规则:无"
|
comp_box "$CORECFG_CUR_EXCLUDE_NONE"
|
||||||
else
|
else
|
||||||
comp_box "当前排除规则:$exclude_w"
|
comp_box "$CORECFG_CUR_EXCLUDE$exclude_w"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
btm_box "\033[36m请直接输入需要排除的节点关键字(支持正则,不支持空格)\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_EXCLUDE\033[0m" \
|
||||||
"或输入 c 清空排除规则" \
|
"$CORECFG_CLEAR_EXCLUDE" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " text
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
text=$(echo "$text" | sed 's/ //g') # 去空格
|
text=$(echo "$text" | sed 's/ //g') # 去空格
|
||||||
case "$text" in
|
case "$text" in
|
||||||
0)
|
0)
|
||||||
@@ -441,14 +443,14 @@ custproviders() {
|
|||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
if [ -z "$include_w" ]; then
|
if [ -z "$include_w" ]; then
|
||||||
comp_box "当前包含规则:无"
|
comp_box "$CORECFG_CUR_INCLUDE_NONE"
|
||||||
else
|
else
|
||||||
comp_box "当前包含规则:$include_w"
|
comp_box "$CORECFG_CUR_INCLUDE$include_w"
|
||||||
fi
|
fi
|
||||||
btm_box "\033[36m请直接输入需要包含的节点关键字(支持正则,不支持空格)\033[0m" \
|
btm_box "\033[36m$CORECFG_INPUT_INCLUDE\033[0m" \
|
||||||
"或输入 c 清空包含规则" \
|
"$CORECFG_CLEAR_INCLUDE" \
|
||||||
"或输入 0 返回上级菜单"
|
"$CORECFG_OR_BACK"
|
||||||
read -r -p "请输入> " text
|
read -r -p "$CORECFG_INPUT> " text
|
||||||
text=$(echo "$text" | sed 's/ //g') # 去空格
|
text=$(echo "$text" | sed 's/ //g') # 去空格
|
||||||
case "$text" in
|
case "$text" in
|
||||||
0)
|
0)
|
||||||
@@ -475,9 +477,9 @@ jump_core_config() {
|
|||||||
. "$CRASHDIR"/starts/core_config.sh && get_core_config
|
. "$CRASHDIR"/starts/core_config.sh && get_core_config
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
if [ "$inuserguide" != 1 ]; then
|
if [ "$inuserguide" != 1 ]; then
|
||||||
comp_box "是否启动服务以使配置文件生效:"
|
comp_box "$CORECFG_START_APPLY"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $CORECFG_YES" \
|
||||||
"0) 否"
|
"0) $CORECFG_NO"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
start_core
|
start_core
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ __IS_MODULE_7_GATEWAY_LOADED=1
|
|||||||
. "$GT_CFG_PATH"
|
. "$GT_CFG_PATH"
|
||||||
. "$CRASHDIR"/menus/check_port.sh
|
. "$CRASHDIR"/menus/check_port.sh
|
||||||
. "$CRASHDIR"/libs/gen_base64.sh
|
. "$CRASHDIR"/libs/gen_base64.sh
|
||||||
|
load_lang 7_gateway
|
||||||
|
|
||||||
# 访问与控制主菜单
|
# 访问与控制主菜单
|
||||||
gateway() {
|
gateway() {
|
||||||
@@ -22,8 +23,8 @@ gateway() {
|
|||||||
content_line "7) 配置\033[36mWireguard客户端\033[0m(限Singbox) \033[32m$wg_service\033[0m"
|
content_line "7) 配置\033[36mWireguard客户端\033[0m(限Singbox) \033[32m$wg_service\033[0m"
|
||||||
}
|
}
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -95,8 +96,8 @@ set_fw_wan() {
|
|||||||
"3) 移除指定手动放行端口" \
|
"3) 移除指定手动放行端口" \
|
||||||
"4) 清空全部手动放行端口" \
|
"4) 清空全部手动放行端口" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case $num in
|
case $num in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -124,7 +125,7 @@ set_fw_wan() {
|
|||||||
msg_alert "\033[31m最多支持设置放行10个端口,请先减少一些!\033[0m"
|
msg_alert "\033[31m最多支持设置放行10个端口,请先减少一些!\033[0m"
|
||||||
else
|
else
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入要放行的端口号> " port
|
read -r -p "$GW_INPUT_ALLOW_PORT> " port
|
||||||
if echo ",$fw_wan_ports," | grep -q ",$port,"; then
|
if echo ",$fw_wan_ports," | grep -q ",$port,"; then
|
||||||
msg_alert "\033[31m输入错误!请勿重复添加!\033[0m"
|
msg_alert "\033[31m输入错误!请勿重复添加!\033[0m"
|
||||||
elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
elif [ "$port" -lt 1 ] || [ "$port" -gt 65535 ]; then
|
||||||
@@ -188,7 +189,7 @@ set_bot_tg_config() {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
TEXT="已完成Telegram机器人设置!请使用 /$my_alias 呼出功能菜单!"
|
TEXT="$GW_TG_DONE_PREFIX /$my_alias $GW_TG_DONE_SUFFIX"
|
||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
bot_api="https://api.telegram.org/bot$TOKEN"
|
bot_api="https://api.telegram.org/bot$TOKEN"
|
||||||
web_json_post "$bot_api/setMyCommands" "$JSON"
|
web_json_post "$bot_api/setMyCommands" "$JSON"
|
||||||
@@ -221,15 +222,15 @@ set_bot_tg_service() {
|
|||||||
|
|
||||||
set_bot_tg() {
|
set_bot_tg() {
|
||||||
while true; do
|
while true; do
|
||||||
[ -n "$ts_auth_key" ] && ts_auth_key_info='已设置'
|
[ -n "$ts_auth_key" ] && ts_auth_key_info="$GW_SET"
|
||||||
[ -n "$TG_CHATID" ] && TG_CHATID_info='已绑定'
|
[ -n "$TG_CHATID" ] && TG_CHATID_info="$GW_BOUND"
|
||||||
comp_box "\033[31m注意:\033[0m由于网络环境原因,此机器人仅限服务启动时运行!"
|
comp_box "\033[31m注意:\033[0m由于网络环境原因,此机器人仅限服务启动时运行!"
|
||||||
btm_box "1) 启用/关闭TG-BOT服务 \033[32m$bot_tg_service\033[0m" \
|
btm_box "1) 启用/关闭TG-BOT服务 \033[32m$bot_tg_service\033[0m" \
|
||||||
"2) TG-BOT绑定设置 \033[32m$TG_CHATID_info\033[0m" \
|
"2) TG-BOT绑定设置 \033[32m$TG_CHATID_info\033[0m" \
|
||||||
"3) 启动时推送菜单 \033[32m$TG_menupush\033[0m" \
|
"3) 启动时推送菜单 \033[32m$TG_menupush\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -289,8 +290,8 @@ set_vmess() {
|
|||||||
content_line "6) 设置\033[36m混淆host(可选)\033[0m: \033[33m$vms_host\033[0m"
|
content_line "6) 设置\033[36m混淆host(可选)\033[0m: \033[33m$vms_host\033[0m"
|
||||||
btm_box "7) 一键生成\033[32m分享链接\033[0m" \
|
btm_box "7) 一键生成\033[32m分享链接\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -310,7 +311,7 @@ set_vmess() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入端口号(输入0删除)> " text
|
read -r -p "$GW_INPUT_PORT_DEL0> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_port=''
|
vms_port=''
|
||||||
setconfig vms_port "" "$GT_CFG_PATH"
|
setconfig vms_port "" "$GT_CFG_PATH"
|
||||||
@@ -323,7 +324,7 @@ set_vmess() {
|
|||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入ws-path路径(输入0删除)> " text
|
read -r -p "$GW_INPUT_WSPATH> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_ws_path=''
|
vms_ws_path=''
|
||||||
setconfig vms_ws_path "" "$GT_CFG_PATH"
|
setconfig vms_ws_path "" "$GT_CFG_PATH"
|
||||||
@@ -336,7 +337,7 @@ set_vmess() {
|
|||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入UUID(输入0删除)> " text
|
read -r -p "$GW_INPUT_UUID> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
vms_uuid=''
|
vms_uuid=''
|
||||||
setconfig vms_uuid "" "$GT_CFG_PATH"
|
setconfig vms_uuid "" "$GT_CFG_PATH"
|
||||||
@@ -412,8 +413,8 @@ set_shadowsocks() {
|
|||||||
gen_base64 1 >/dev/null 2>&1 &&
|
gen_base64 1 >/dev/null 2>&1 &&
|
||||||
content_line "5) 一键生成分享链接"
|
content_line "5) 一键生成分享链接"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -433,7 +434,7 @@ set_shadowsocks() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入端口号(输入0删除)> " text
|
read -r -p "$GW_INPUT_PORT_DEL0> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
sss_port=''
|
sss_port=''
|
||||||
setconfig sss_port "" "$GT_CFG_PATH"
|
setconfig sss_port "" "$GT_CFG_PATH"
|
||||||
@@ -459,8 +460,8 @@ set_shadowsocks() {
|
|||||||
content_line "7) \033[32m2022-blake3-aes-256-gcm\033[0m"
|
content_line "7) \033[32m2022-blake3-aes-256-gcm\033[0m"
|
||||||
}
|
}
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0) ;;
|
0) ;;
|
||||||
1)
|
1)
|
||||||
@@ -510,7 +511,7 @@ set_shadowsocks() {
|
|||||||
;;
|
;;
|
||||||
5)
|
5)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入本机公网IP(4/6)或域名> " text
|
read -r -p "$GW_INPUT_HOST> " text
|
||||||
if [ -n "$text" ] && [ -n "$sss_port" ] && [ -n "$sss_cipher" ] && [ -n "$sss_pwd" ]; then
|
if [ -n "$text" ] && [ -n "$sss_port" ] && [ -n "$sss_cipher" ] && [ -n "$sss_pwd" ]; then
|
||||||
ss_link="ss://$(gen_base64 "$sss_cipher":"$sss_pwd")@${text}:${sss_port}#ShellCrash_ss_in"
|
ss_link="ss://$(gen_base64 "$sss_cipher":"$sss_pwd")@${text}:${sss_port}#ShellCrash_ss_in"
|
||||||
line_break
|
line_break
|
||||||
@@ -541,8 +542,8 @@ set_tailscale() {
|
|||||||
"4) 通告路由\033[31m全部流量\033[0m(EXIT-NODE) \033[36m$ts_exit_node\033[0m" \
|
"4) 通告路由\033[31m全部流量\033[0m(EXIT-NODE) \033[36m$ts_exit_node\033[0m" \
|
||||||
"5) 设置\033[36m设备名称\033[0m(可选) $ts_hostname" \
|
"5) 设置\033[36m设备名称\033[0m(可选) $ts_hostname" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -621,8 +622,8 @@ set_wireguard() {
|
|||||||
"7) 设置\033[33m组网IPV4地址\033[0m: \033[33m$wg_ipv4\033[0m" \
|
"7) 设置\033[33m组网IPV4地址\033[0m: \033[33m$wg_ipv4\033[0m" \
|
||||||
"8) 可选\033[33m组网IPV6地址\033[0m: \033[33m$wg_ipv6\033[0m" \
|
"8) 可选\033[33m组网IPV6地址\033[0m: \033[33m$wg_ipv6\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ __IS_MODULE_8_TOOLS_LOADED=1
|
|||||||
|
|
||||||
. "$CRASHDIR"/libs/logger.sh
|
. "$CRASHDIR"/libs/logger.sh
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
load_lang 8_tools
|
||||||
|
|
||||||
stop_iptables() {
|
stop_iptables() {
|
||||||
iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22 >/dev/null 2>&1
|
iptables -w -t nat -D PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22 >/dev/null 2>&1
|
||||||
@@ -14,7 +15,7 @@ stop_iptables() {
|
|||||||
|
|
||||||
ssh_tools() {
|
ssh_tools() {
|
||||||
while true; do
|
while true; do
|
||||||
[ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=禁止 || ssh_ol=开启
|
[ -n "$(cat /etc/firewall.user 2>&1 | grep '启用外网访问SSH服务')" ] && ssh_ol=$TOOLS_SSH_DISABLE || ssh_ol=$TOOLS_SSH_ENABLE
|
||||||
[ -z "$ssh_port" ] && ssh_port=10022
|
[ -z "$ssh_port" ] && ssh_port=10022
|
||||||
comp_box "\033[33m此功能仅针对使用Openwrt系统的设备生效,且不依赖服务\033[0m" \
|
comp_box "\033[33m此功能仅针对使用Openwrt系统的设备生效,且不依赖服务\033[0m" \
|
||||||
"\033[31m本功能不支持红米AX6S等镜像化系统设备,请勿尝试!\033[0m"
|
"\033[31m本功能不支持红米AX6S等镜像化系统设备,请勿尝试!\033[0m"
|
||||||
@@ -23,7 +24,7 @@ ssh_tools() {
|
|||||||
"3) \033[33m$ssh_ol\033[0m外网访问SSH" \
|
"3) \033[33m$ssh_ol\033[0m外网访问SSH" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单 \033[0m"
|
"0) 返回上级菜单 \033[0m"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -34,16 +35,16 @@ ssh_tools() {
|
|||||||
if [ -z "$num" ]; then
|
if [ -z "$num" ]; then
|
||||||
errornum
|
errornum
|
||||||
elif [ "$num" -gt 65535 ] || [ "$num" -le 999 ]; then
|
elif [ "$num" -gt 65535 ] || [ "$num" -le 999 ]; then
|
||||||
msg_alert "\033[31m输入错误!请输入正确的数值(1000-65535)!\033[0m"
|
msg_alert "\033[31m$TOOLS_ERR_PORT\033[0m"
|
||||||
elif [ -n "$(netstat -ntul | grep :$num)" ]; then
|
elif [ -n "$(netstat -ntul | grep :$num)" ]; then
|
||||||
msg_alert "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m"
|
msg_alert "\033[31m$TOOLS_ERR_PORT_OCCUPIED\033[0m"
|
||||||
else
|
else
|
||||||
ssh_port=$num
|
ssh_port=$num
|
||||||
setconfig ssh_port "$ssh_port"
|
setconfig ssh_port "$ssh_port"
|
||||||
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
||||||
stop_iptables
|
stop_iptables
|
||||||
|
|
||||||
msg_alert "\033[32m设置成功,请重新开启外网访问SSH功能!"
|
msg_alert "\033[32m$TOOLS_SSH_SET_OK"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
@@ -56,11 +57,11 @@ ssh_tools() {
|
|||||||
[ -n "$(ckcmd ip6tables)" ] && ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22
|
[ -n "$(ckcmd ip6tables)" ] && ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports "$ssh_port" -j REDIRECT --to-ports 22
|
||||||
echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
echo "iptables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
||||||
[ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
[ -n "$(ckcmd ip6tables)" ] && echo "ip6tables -w -t nat -A PREROUTING -p tcp -m multiport --dports $ssh_port -j REDIRECT --to-ports 22 #启用外网访问SSH服务" >>/etc/firewall.user
|
||||||
comp_box "已开启外网访问SSH功能!"
|
comp_box "$TOOLS_SSH_ENABLED"
|
||||||
else
|
else
|
||||||
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user
|
||||||
stop_iptables
|
stop_iptables
|
||||||
comp_box "已禁止外网访问SSH!"
|
comp_box "$TOOLS_SSH_DISABLED"
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
@@ -75,10 +76,10 @@ ssh_tools() {
|
|||||||
tools() {
|
tools() {
|
||||||
while true; do
|
while true; do
|
||||||
# 获取设置默认显示
|
# 获取设置默认显示
|
||||||
grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=禁用 || mi_update=启用
|
grep -qE "^\s*[^#].*otapredownload" /etc/crontabs/root >/dev/null 2>&1 && mi_update=$TOOLS_DISABLE || mi_update=$TOOLS_ENABLE
|
||||||
[ "$mi_mi_autoSSH" = "已配置" ] && mi_mi_autoSSH_type=32m已配置 || mi_mi_autoSSH_type=31m未配置
|
[ "$mi_mi_autoSSH" = "$TOOLS_CONFIGURED" ] && mi_mi_autoSSH_type=32m$TOOLS_CONFIGURED || mi_mi_autoSSH_type=31m$COMMON_UNSET
|
||||||
[ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32mON || mi_tunfix=31mOFF
|
[ -f "$CRASHDIR"/tools/tun.ko ] && mi_tunfix=32mON || mi_tunfix=31mOFF
|
||||||
comp_box "\033[30;47m工具与优化\033[0m" \
|
comp_box "\033[30;47m$TOOLS_TITLE\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"\033[33m本页工具可能无法兼容全部Linux设备,请酌情使用!\033[0m" \
|
"\033[33m本页工具可能无法兼容全部Linux设备,请酌情使用!\033[0m" \
|
||||||
"磁盘占用/所在目录:" \
|
"磁盘占用/所在目录:" \
|
||||||
@@ -91,8 +92,8 @@ tools() {
|
|||||||
[ "$systype" = "mi_snapshot" ] && content_line "6) 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m"
|
[ "$systype" = "mi_snapshot" ] && content_line "6) 小米设备软固化SSH ———— \033[$mi_mi_autoSSH_type \033[0m"
|
||||||
[ "$systype" = "mi_snapshot" ] && content_line "8) 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m"
|
[ "$systype" = "mi_snapshot" ] && content_line "8) 小米设备Tun模块修复 ———— \033[$mi_tunfix \033[0m"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -164,7 +165,7 @@ tools() {
|
|||||||
comp_box "\033[33m本功能需要修改系统文件,不保证没有任何风险!\033[0m" \
|
comp_box "\033[33m本功能需要修改系统文件,不保证没有任何风险!\033[0m" \
|
||||||
"\033[33m本功能采集的Tun模块并不一定适用于你的设备!\033[0m"
|
"\033[33m本功能采集的Tun模块并不一定适用于你的设备!\033[0m"
|
||||||
btm_box "1) 我已知晓,出现问题会自行承担!" \
|
btm_box "1) 我已知晓,出现问题会自行承担!" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "请输入对应标号> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
line_break
|
line_break
|
||||||
@@ -199,7 +200,7 @@ mi_autoSSH() {
|
|||||||
btm_box "请输入需要还原的SSH密码(不影响当前密码)" \
|
btm_box "请输入需要还原的SSH密码(不影响当前密码)" \
|
||||||
"(回车可跳过)"
|
"(回车可跳过)"
|
||||||
read -r -p "请输入> " mi_mi_autoSSH_pwd
|
read -r -p "请输入> " mi_mi_autoSSH_pwd
|
||||||
mi_mi_autoSSH=已配置
|
mi_mi_autoSSH=$TOOLS_CONFIGURED
|
||||||
cp -f /etc/dropbear/dropbear_rsa_host_key "$CRASHDIR"/configs/dropbear_rsa_host_key 2>/dev/null
|
cp -f /etc/dropbear/dropbear_rsa_host_key "$CRASHDIR"/configs/dropbear_rsa_host_key 2>/dev/null
|
||||||
cp -f /etc/dropbear/authorized_keys "$CRASHDIR"/configs/authorized_keys 2>/dev/null
|
cp -f /etc/dropbear/authorized_keys "$CRASHDIR"/configs/authorized_keys 2>/dev/null
|
||||||
ckcmd nvram && {
|
ckcmd nvram && {
|
||||||
@@ -211,7 +212,7 @@ mi_autoSSH() {
|
|||||||
}
|
}
|
||||||
setconfig mi_mi_autoSSH $mi_mi_autoSSH
|
setconfig mi_mi_autoSSH $mi_mi_autoSSH
|
||||||
setconfig mi_mi_autoSSH_pwd "$mi_mi_autoSSH_pwd"
|
setconfig mi_mi_autoSSH_pwd "$mi_mi_autoSSH_pwd"
|
||||||
msg_alert "\033[32m设置成功!\033[0m"
|
msg_alert "\033[32m$COMMON_SUCCESS\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 日志菜单
|
# 日志菜单
|
||||||
@@ -239,8 +240,8 @@ log_pusher() {
|
|||||||
"c) 设置设备名称 ——\033[$device_s\033[0m" \
|
"c) 设置设备名称 ——\033[$device_s\033[0m" \
|
||||||
"d) 清空日志文件" \
|
"d) 清空日志文件" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -266,8 +267,8 @@ log_pusher() {
|
|||||||
comp_box "1) 使用公共机器人 ——不依赖内核服务" \
|
comp_box "1) 使用公共机器人 ——不依赖内核服务" \
|
||||||
"2) 使用私人机器人 ——需要额外申请" \
|
"2) 使用私人机器人 ——需要额外申请" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
return 0
|
return 0
|
||||||
@@ -378,7 +379,7 @@ log_pusher() {
|
|||||||
elif [ -n "$key" ]; then
|
elif [ -n "$key" ]; then
|
||||||
comp_box "\033[33m请检查注册邮箱,完成账户验证\033[0m"
|
comp_box "\033[33m请检查注册邮箱,完成账户验证\033[0m"
|
||||||
btm_box "1) 我已经验证完成" \
|
btm_box "1) 我已经验证完成" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "我已经验证完成(1/0)> " res
|
read -r -p "我已经验证完成(1/0)> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
comp_box "请通过 \033[32;4mhttps://pushover.net/apps/build\033[0m 生成\033[36mAPI Token\033[0m"
|
comp_box "请通过 \033[32;4mhttps://pushover.net/apps/build\033[0m 生成\033[36mAPI Token\033[0m"
|
||||||
@@ -542,8 +543,8 @@ testcommand() {
|
|||||||
"5) 查看内核配置文件前40行" \
|
"5) 查看内核配置文件前40行" \
|
||||||
"6) 测试代理服务器连通性(google.tw)" \
|
"6) 测试代理服务器连通性(google.tw)" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级目录"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
break
|
break
|
||||||
@@ -661,8 +662,8 @@ debug() {
|
|||||||
content_line "8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
|
content_line "8) 后台运行完整启动流程,输出执行错误并查找上下文,之后关闭进程"
|
||||||
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json"
|
[ -s "$TMPDIR"/jsons/inbounds.json ] && content_line "9) 将\033[32m$config_tmp\033[0m下json文件合并为$TMPDIR/debug.json"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级目录"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0) ;;
|
0) ;;
|
||||||
1)
|
1)
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ __IS_MODULE_9_UPGRADE_LOADED=1
|
|||||||
. "$CRASHDIR"/libs/check_dir_avail.sh
|
. "$CRASHDIR"/libs/check_dir_avail.sh
|
||||||
. "$CRASHDIR"/libs/check_cpucore.sh
|
. "$CRASHDIR"/libs/check_cpucore.sh
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
load_lang 9_upgrade
|
||||||
|
|
||||||
error_down() {
|
error_down() {
|
||||||
btm_box "\033[33m请尝试切换至其他安装源后重新下载!\033[0m" \
|
btm_box "\033[33m$UPG_ERR_TRY_OTHER_SOURCE\033[0m" \
|
||||||
"或者参考 \033[32;4mhttps://juewuy.github.io/bdaz\033[0m 进行本地安装!"
|
"$UPG_ERR_LOCAL_INSTALL"
|
||||||
sleep 1
|
sleep 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,25 +23,25 @@ upgrade() {
|
|||||||
fi
|
fi
|
||||||
[ -z "$core_v" ] && core_v=$crashcore
|
[ -z "$core_v" ] && core_v=$crashcore
|
||||||
core_v_new=$(eval echo \$"$crashcore"_v)
|
core_v_new=$(eval echo \$"$crashcore"_v)
|
||||||
top_box "\033[30;47m更新与支持\033[0m" \
|
top_box "\033[30;47m$UPG_TITLE\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"当前目录(\033[32m$CRASHDIR\033[0m)剩余空间:\033[36m$(dir_avail "$CRASHDIR" -h)\033[0m"
|
"$UPG_CUR_DIR_SPACE(\033[32m$CRASHDIR\033[0m):\033[36m$(dir_avail "$CRASHDIR" -h)\033[0m"
|
||||||
[ "$(dir_avail "$CRASHDIR")" -le 5120 ] && [ "$CRASHDIR" = "$BINDIR" ] && {
|
[ "$(dir_avail "$CRASHDIR")" -le 5120 ] && [ "$CRASHDIR" = "$BINDIR" ] && {
|
||||||
content_line "\033[33m当前目录剩余空间较低,建议开启小闪存模式!\033[0m"
|
content_line "\033[33m$UPG_LOW_SPACE_HINT\033[0m"
|
||||||
}
|
}
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "1) 更新\033[36m管理脚本\t\033[33m$versionsh_l\033[0m > \033[32m$version_new \033[36m$release_type\033[0m" \
|
btm_box "1) $UPG_MENU_SCRIPT\033[36m$UPG_MENU_SCRIPT_NAME\t\033[33m$versionsh_l\033[0m > \033[32m$version_new \033[36m$release_type\033[0m" \
|
||||||
"2) 切换/更新\033[33m内核文件\t\033[33m$core_v\033[0m > \033[32m$core_v_new\033[0m" \
|
"2) $UPG_MENU_CORE\033[33m$UPG_MENU_CORE_NAME\t\033[33m$core_v\033[0m > \033[32m$core_v_new\033[0m" \
|
||||||
"3) 安装/更新本地\033[32m数据库文件\033[0m" \
|
"3) $UPG_MENU_GEO\033[32m$UPG_MENU_GEO_NAME\033[0m" \
|
||||||
"4) 安装/更新本地\033[35mDashboard面板\033[0m" \
|
"4) $UPG_MENU_DB\033[35m$UPG_MENU_DB_NAME\033[0m" \
|
||||||
"5) 安装/更新本地\033[33m根证书文件\033[0m" \
|
"5) $UPG_MENU_CRT\033[33m$UPG_MENU_CRT_NAME\033[0m" \
|
||||||
"6) \033[32mPAC\033[0m自动代理查看" \
|
"6) \033[32mPAC\033[0m$UPG_MENU_PAC" \
|
||||||
"7) 切换\033[36m安装源及版本分支\033[0m" \
|
"7) $UPG_MENU_SOURCE\033[36m$UPG_MENU_SOURCE_NAME\033[0m" \
|
||||||
"8) \033[31m卸载ShellCrash\033[0m" \
|
"8) \033[31m$UPG_MENU_UNINSTALL\033[0m" \
|
||||||
"9) \033[36m感谢列表!\033[0m" \
|
"9) \033[36m$UPG_MENU_THANKS\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -61,8 +62,8 @@ upgrade() {
|
|||||||
setcrt
|
setcrt
|
||||||
;;
|
;;
|
||||||
6)
|
6)
|
||||||
msg_alert -t 2 "PAC配置链接为:\033[30;47m http://$host:$db_port/ui/pac \033[0m" \
|
msg_alert -t 2 "$UPG_PAC_LINK\033[30;47m http://$host:$db_port/ui/pac \033[0m" \
|
||||||
"PAC的使用教程请参考:\033[4;32mhttps://juewuy.github.io/ehRUeewcv\033[0m"
|
"$UPG_PAC_GUIDE\033[4;32mhttps://juewuy.github.io/ehRUeewcv\033[0m"
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
setserver
|
setserver
|
||||||
@@ -71,7 +72,7 @@ upgrade() {
|
|||||||
. "$CRASHDIR"/menus/uninstall.sh && uninstall
|
. "$CRASHDIR"/menus/uninstall.sh && uninstall
|
||||||
;;
|
;;
|
||||||
9)
|
9)
|
||||||
comp_box "感谢以下项目及其开发者们的无私奉献!"
|
comp_box "$UPG_THANKS_TITLE"
|
||||||
btm_box "\033[32mClash \033[0m开发:\033[36mDreamacro\033[0m" \
|
btm_box "\033[32mClash \033[0m开发:\033[36mDreamacro\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"\033[32msing-box \033[0m开发:\033[36mSagerNet\033[0m" \
|
"\033[32msing-box \033[0m开发:\033[36mSagerNet\033[0m" \
|
||||||
@@ -95,7 +96,7 @@ upgrade() {
|
|||||||
"\033[32mDustinWin \033[0m开发:\033[36mDustinWin\033[0m" \
|
"\033[32mDustinWin \033[0m开发:\033[36mDustinWin\033[0m" \
|
||||||
"开发者地址:\033[32mhttps://github.com/DustinWin\033[0m" \
|
"开发者地址:\033[32mhttps://github.com/DustinWin\033[0m" \
|
||||||
""
|
""
|
||||||
btm_box "特别感谢:\033[36m所有帮助及赞助过此项目的同仁们!\033[0m"
|
btm_box "$UPG_THANKS_SPECIAL"
|
||||||
sleep 2
|
sleep 2
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -109,18 +110,18 @@ upgrade() {
|
|||||||
checkupdate() {
|
checkupdate() {
|
||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
content_line "\033[32m正在检查更新......\033[0m"
|
content_line "\033[32m$UPG_CHECKING\033[0m"
|
||||||
get_bin "$TMPDIR"/version_new version echooff
|
get_bin "$TMPDIR"/version_new version echooff
|
||||||
[ "$?" = "0" ] && {
|
[ "$?" = "0" ] && {
|
||||||
version_new=$(cat "$TMPDIR"/version_new)
|
version_new=$(cat "$TMPDIR"/version_new)
|
||||||
get_bin "$TMPDIR"/version_new bin/version echooff
|
get_bin "$TMPDIR"/version_new bin/version echooff
|
||||||
content_line "\033[32m检查更新成功\033[0m"
|
content_line "\033[32m$UPG_CHECK_OK\033[0m"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
}
|
}
|
||||||
if [ "$?" = "0" ]; then
|
if [ "$?" = "0" ]; then
|
||||||
. "$TMPDIR"/version_new 2>/dev/null
|
. "$TMPDIR"/version_new 2>/dev/null
|
||||||
else
|
else
|
||||||
content_line "\033[31m检查更新失败!请尝试切换其他安装源!\033[0m"
|
content_line "\033[31m$UPG_CHECK_FAIL\033[0m"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
setserver
|
setserver
|
||||||
if [ "$checkupdate" != false ]; then
|
if [ "$checkupdate" != false ]; then
|
||||||
@@ -137,21 +138,21 @@ getscripts() {
|
|||||||
get_bin "$TMPDIR"/ShellCrash.tar.gz ShellCrash.tar.gz
|
get_bin "$TMPDIR"/ShellCrash.tar.gz ShellCrash.tar.gz
|
||||||
|
|
||||||
if [ "$?" != "0" ]; then
|
if [ "$?" != "0" ]; then
|
||||||
content_line "\033[33m文件下载失败!\033[0m"
|
content_line "\033[33m$UPG_DOWNLOAD_FAIL\033[0m"
|
||||||
error_down
|
error_down
|
||||||
else
|
else
|
||||||
"$CRASHDIR"/start.sh stop 2>/dev/null
|
"$CRASHDIR"/start.sh stop 2>/dev/null
|
||||||
# 解压
|
# 解压
|
||||||
content_line "开始解压文件......"
|
content_line "$UPG_EXTRACTING"
|
||||||
mkdir -p "$CRASHDIR" >/dev/null
|
mkdir -p "$CRASHDIR" >/dev/null
|
||||||
tar -zxf "$TMPDIR/ShellCrash.tar.gz" ${tar_para} -C "$CRASHDIR"/
|
tar -zxf "$TMPDIR/ShellCrash.tar.gz" ${tar_para} -C "$CRASHDIR"/
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
content_line "\033[33m文件解压失败!\033[0m"
|
content_line "\033[33m$UPG_EXTRACT_FAIL\033[0m"
|
||||||
error_down
|
error_down
|
||||||
else
|
else
|
||||||
. "$CRASHDIR"/init.sh >/dev/null
|
. "$CRASHDIR"/init.sh >/dev/null
|
||||||
echo "$release_type" | grep -qE '^[0-9]' && setconfig userguide #回退时重新新手引导
|
echo "$release_type" | grep -qE '^[0-9]' && setconfig userguide #回退时重新新手引导
|
||||||
content_line "\033[32m脚本更新成功!\033[0m"
|
content_line "\033[32m$UPG_SCRIPT_OK\033[0m"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -161,13 +162,13 @@ getscripts() {
|
|||||||
|
|
||||||
setscripts() {
|
setscripts() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[33m注意:更新时会停止服务!\033[0m" \
|
comp_box "\033[33m$UPG_SCRIPT_WARN\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"当前脚本版本为:\033[36m$versionsh_l\033[0m" \
|
"$UPG_SCRIPT_CUR_VER\033[36m$versionsh_l\033[0m" \
|
||||||
"最新脚本版本为:\033[32m$version_new\033[0m"
|
"$UPG_SCRIPT_NEW_VER\033[32m$version_new\033[0m"
|
||||||
btm_box "1) 立即更新" \
|
btm_box "1) $UPG_UPDATE_NOW" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -176,7 +177,7 @@ setscripts() {
|
|||||||
# 下载更新
|
# 下载更新
|
||||||
getscripts
|
getscripts
|
||||||
# 提示
|
# 提示
|
||||||
msg_alert "\033[32m管理脚本更新成功!\033[0m"
|
msg_alert "\033[32m$UPG_SCRIPT_MGR_OK\033[0m"
|
||||||
line_break
|
line_break
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
@@ -192,10 +193,10 @@ setscripts() {
|
|||||||
setcpucore() {
|
setcpucore() {
|
||||||
cpucore_list="armv5 armv7 arm64 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat"
|
cpucore_list="armv5 armv7 arm64 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat"
|
||||||
|
|
||||||
comp_box "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用!\033[0m" \
|
comp_box "\033[31m$UPG_CPUCORE_HINT1\033[0m" \
|
||||||
"不知道如何获取核心版本?\033[0m" \
|
"$UPG_CPUCORE_HINT2" \
|
||||||
"请参考:\033[36;4mhttps://juewuy.github.io/bdaz\033[0m"
|
"$UPG_CPUCORE_HINT3\033[36;4mhttps://juewuy.github.io/bdaz\033[0m"
|
||||||
content_line "当前可供在线下载的处理器架构为:"
|
content_line "$UPG_CPUCORE_LIST"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
|
|
||||||
echo "$cpucore_list" |
|
echo "$cpucore_list" |
|
||||||
@@ -205,11 +206,11 @@ setcpucore() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
[ -n "$num" ] && setcpucore=$(echo "$cpucore_list" | awk '{print $"'"$num"'"}')
|
[ -n "$num" ] && setcpucore=$(echo "$cpucore_list" | awk '{print $"'"$num"'"}')
|
||||||
if [ -z "$setcpucore" ]; then
|
if [ -z "$setcpucore" ]; then
|
||||||
cpucore=""
|
cpucore=""
|
||||||
msg_alert "\033[31m请输入正确的处理器架构!\033[0m"
|
msg_alert "\033[31m$UPG_CPUCORE_ERR\033[0m"
|
||||||
else
|
else
|
||||||
cpucore=$setcpucore
|
cpucore=$setcpucore
|
||||||
setconfig cpucore "$cpucore"
|
setconfig cpucore "$cpucore"
|
||||||
@@ -220,14 +221,14 @@ setcpucore() {
|
|||||||
setcoretype() {
|
setcoretype() {
|
||||||
while true; do
|
while true; do
|
||||||
echo "$crashcore" | grep -q 'singbox' && core_old=singbox || core_old=clash
|
echo "$crashcore" | grep -q 'singbox' && core_old=singbox || core_old=clash
|
||||||
comp_box "\033[33m请确认该自定义内核的类型:\033[0m"
|
comp_box "\033[33m$UPG_CORETYPE_CONFIRM\033[0m"
|
||||||
btm_box "1) Mihomo(Meta)" \
|
btm_box "1) Mihomo(Meta)" \
|
||||||
"2) Singbox-reF1nd" \
|
"2) Singbox-reF1nd" \
|
||||||
"3) Singbox" \
|
"3) Singbox" \
|
||||||
"4) Clash" \
|
"4) Clash" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0) ;;
|
"" | 0) ;;
|
||||||
1)
|
1)
|
||||||
@@ -258,12 +259,12 @@ switch_core() {
|
|||||||
[ "$core_new" != "$core_old" ] && {
|
[ "$core_new" != "$core_old" ] && {
|
||||||
[ "$dns_mod" = "redir_host" ] && [ "$core_old" = "clash" ] && setconfig dns_mod mix #singbox自动切换dns
|
[ "$dns_mod" = "redir_host" ] && [ "$core_old" = "clash" ] && setconfig dns_mod mix #singbox自动切换dns
|
||||||
[ "$dns_mod" = "mix" ] && [ "$crashcore" = 'clash' -o "$crashcore" = 'clashpre' ] && setconfig dns_mod redir_host #singbox自动切换dns
|
[ "$dns_mod" = "mix" ] && [ "$crashcore" = 'clash' -o "$crashcore" = 'clashpre' ] && setconfig dns_mod redir_host #singbox自动切换dns
|
||||||
comp_box "\033[33m已从$core_old内核切换至$core_new内核\033[0m" \
|
comp_box "\033[33m$UPG_CORE_SWITCH_PREFIX$core_old$UPG_CORE_SWITCH_MID$core_new$UPG_CORE_SWITCH_SUFFIX\033[0m" \
|
||||||
"\033[33m二者Geo数据库及yaml/json配置文件不通用\033[0m" \
|
"\033[33m$UPG_CORE_SWITCH_WARN\033[0m" \
|
||||||
"是否保留相关数据库文件?"
|
"$UPG_CORE_SWITCH_KEEP"
|
||||||
btm_box "1) 保留" \
|
btm_box "1) $UPG_KEEP" \
|
||||||
"0) 不保留"
|
"0) $UPG_NOT_KEEP"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = '0' ] && {
|
[ "$res" = '0' ] && {
|
||||||
[ "$core_old" = "clash" ] && {
|
[ "$core_old" = "clash" ] && {
|
||||||
geodate='Country.mmdb GeoSite.dat ruleset/*.mrs ruleset/*.yaml ruleset/*.yml'
|
geodate='Country.mmdb GeoSite.dat ruleset/*.mrs ruleset/*.yaml ruleset/*.yml'
|
||||||
@@ -355,8 +356,8 @@ checkcustcore() {
|
|||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
return 0
|
return 0
|
||||||
@@ -408,8 +409,8 @@ setcustcore() {
|
|||||||
"4) Premium-2023.08.17内核(已停止维护)" \
|
"4) Premium-2023.08.17内核(已停止维护)" \
|
||||||
"9) \033[33m自定义内核链接 \033[0m" \
|
"9) \033[33m自定义内核链接 \033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -469,7 +470,7 @@ setziptype() {
|
|||||||
sub_content_line "占用可能略高,稳定性自测"
|
sub_content_line "占用可能略高,稳定性自测"
|
||||||
content_line "0) 返回上级菜单"
|
content_line "0) 返回上级菜单"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0) ;;
|
"" | 0) ;;
|
||||||
1)
|
1)
|
||||||
@@ -524,8 +525,8 @@ setcore() {
|
|||||||
"7) \033[32m更新当前内核\033[0m" \
|
"7) \033[32m更新当前内核\033[0m" \
|
||||||
"9) 手动指定处理器架构" \
|
"9) 手动指定处理器架构" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -654,7 +655,7 @@ checkcustgeo() {
|
|||||||
content_line ""
|
content_line ""
|
||||||
content_line "0) 返回上级菜单"
|
content_line "0) 返回上级菜单"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -712,7 +713,7 @@ setcustgeo() {
|
|||||||
content_line ""
|
content_line ""
|
||||||
content_line "0) 返回上级菜单"
|
content_line "0) 返回上级菜单"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -776,8 +777,8 @@ setgeo() {
|
|||||||
"8) \033[36m自定义数据库文件\033[0m" \
|
"8) \033[36m自定义数据库文件\033[0m" \
|
||||||
"9) \033[31m清理数据库文件\033[0m" \
|
"9) \033[31m清理数据库文件\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -820,8 +821,8 @@ setgeo() {
|
|||||||
comp_box "\033[33m这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件!\033[0m" \
|
comp_box "\033[33m这将清理$CRASHDIR目录及/ruleset目录下所有数据库文件!\033[0m" \
|
||||||
"清理后启动服务即可自动下载所需文件"
|
"清理后启动服务即可自动下载所需文件"
|
||||||
btm_box "1) 确认清理" \
|
btm_box "1) 确认清理" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -898,8 +899,8 @@ dbdir() {
|
|||||||
if [ -f /www/clash/CNAME ] || [ -f "$CRASHDIR"/ui/CNAME ]; then
|
if [ -f /www/clash/CNAME ] || [ -f "$CRASHDIR"/ui/CNAME ]; then
|
||||||
comp_box "\033[33m检测到已经安装过本地面板\033[0m"
|
comp_box "\033[33m检测到已经安装过本地面板\033[0m"
|
||||||
btm_box "1) 升级/覆盖安装" \
|
btm_box "1) 升级/覆盖安装" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
rm -rf "$BINDIR"/ui
|
rm -rf "$BINDIR"/ui
|
||||||
[ -f /www/clash/CNAME ] && rm -rf /www/clash && dbdir=/www/clash
|
[ -f /www/clash/CNAME ] && rm -rf /www/clash && dbdir=/www/clash
|
||||||
@@ -914,8 +915,8 @@ dbdir() {
|
|||||||
btm_box "1) 在${CRASHDIR}/ui目录安装" \
|
btm_box "1) 在${CRASHDIR}/ui目录安装" \
|
||||||
"2) 在/www/clash目录安装" \
|
"2) 在/www/clash目录安装" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
return 0
|
return 0
|
||||||
@@ -958,8 +959,8 @@ setdb() {
|
|||||||
"6) 安装\033[32mYacd面板\033[0m(约1.1mb)" \
|
"6) 安装\033[32mYacd面板\033[0m(约1.1mb)" \
|
||||||
"9) \033[31m卸载本地面板\033[0m" \
|
"9) \033[31m卸载本地面板\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -994,8 +995,8 @@ setdb() {
|
|||||||
while true; do
|
while true; do
|
||||||
comp_box "是否卸载本地面板?"
|
comp_box "是否卸载本地面板?"
|
||||||
btm_box "1) 确认卸载" \
|
btm_box "1) 确认卸载" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -1074,7 +1075,7 @@ setcrt() {
|
|||||||
fi
|
fi
|
||||||
content_line "0) 返回上级菜单"
|
content_line "0) 返回上级菜单"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -1136,8 +1137,8 @@ setserver() {
|
|||||||
"d) 自定义源地址(用于本地源或自建源)" \
|
"d) 自定义源地址(用于本地源或自建源)" \
|
||||||
"e) \033[31m版本回退\033[0m" \
|
"e) \033[31m版本回退\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
checkupdate=false
|
checkupdate=false
|
||||||
@@ -1179,8 +1180,8 @@ setserver() {
|
|||||||
content_line "是否依然切换到开发版?"
|
content_line "是否依然切换到开发版?"
|
||||||
separator_line "-"
|
separator_line "-"
|
||||||
btm_box "1) 确认切换" \
|
btm_box "1) 确认切换" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -1225,8 +1226,8 @@ setserver() {
|
|||||||
content_line "\033[31m请选择想要回退至的具体版本:\033[0m"
|
content_line "\033[31m请选择想要回退至的具体版本:\033[0m"
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应标号> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ -z "$num" ] || [ "$num" = 0 ]; then
|
if [ -z "$num" ] || [ "$num" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ "$num" -le $(echo "$list" | awk 'END{print NR}') ]; then
|
elif [ "$num" -le $(echo "$list" | awk 'END{print NR}') ]; then
|
||||||
|
|||||||
@@ -4,10 +4,13 @@
|
|||||||
. "$CRASHDIR"/libs/web_json.sh
|
. "$CRASHDIR"/libs/web_json.sh
|
||||||
. "$CRASHDIR"/libs/set_config.sh
|
. "$CRASHDIR"/libs/set_config.sh
|
||||||
. "$CRASHDIR"/libs/web_get_lite.sh
|
. "$CRASHDIR"/libs/web_get_lite.sh
|
||||||
|
. "$CRASHDIR"/libs/i18n.sh
|
||||||
. "$CRASHDIR"/menus/running_status.sh
|
. "$CRASHDIR"/menus/running_status.sh
|
||||||
. "$CRASHDIR"/configs/gateway.cfg
|
. "$CRASHDIR"/configs/gateway.cfg
|
||||||
. "$CRASHDIR"/configs/ShellCrash.cfg
|
. "$CRASHDIR"/configs/ShellCrash.cfg
|
||||||
|
|
||||||
|
load_lang bot_tg
|
||||||
|
|
||||||
TMPDIR='/tmp/ShellCrash'
|
TMPDIR='/tmp/ShellCrash'
|
||||||
API="https://api.telegram.org/bot$TG_TOKEN"
|
API="https://api.telegram.org/bot$TG_TOKEN"
|
||||||
STATE_FILE="$TMPDIR/tgbot_state"
|
STATE_FILE="$TMPDIR/tgbot_state"
|
||||||
@@ -32,15 +35,15 @@ send_msg(){
|
|||||||
}
|
}
|
||||||
send_help(){
|
send_help(){
|
||||||
TEXT=$(cat <<EOF
|
TEXT=$(cat <<EOF
|
||||||
进群讨论:
|
$BOT_TG_HELP_GROUP
|
||||||
https://t.me/+6AElkMDzwPxmMmM1
|
https://t.me/+6AElkMDzwPxmMmM1
|
||||||
项目地址:
|
$BOT_TG_HELP_PROJECT
|
||||||
https://github.com/juewuy/ShellClash
|
https://github.com/juewuy/ShellClash
|
||||||
相关教程:
|
$BOT_TG_HELP_GUIDE
|
||||||
https://juewuy.github.io
|
https://juewuy.github.io
|
||||||
请喝咖啡:
|
$BOT_TG_HELP_COFFEE
|
||||||
https://juewuy.github.io/yOF4Yf06Q/
|
https://juewuy.github.io/yOF4Yf06Q/
|
||||||
友情机场:
|
$BOT_TG_HELP_AIRPORT
|
||||||
https://dler.pro/auth/register?affid=89698
|
https://dler.pro/auth/register?affid=89698
|
||||||
https://pub.bigmeok.me?code=2PuWY9I7
|
https://pub.bigmeok.me?code=2PuWY9I7
|
||||||
EOF
|
EOF
|
||||||
@@ -51,31 +54,31 @@ send_menu(){
|
|||||||
#获取运行状态
|
#获取运行状态
|
||||||
PID=$(pidof CrashCore | awk '{print $NF}')
|
PID=$(pidof CrashCore | awk '{print $NF}')
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
run='🟢正在运行'
|
run="$BOT_TG_RUN_ON"
|
||||||
running_status
|
running_status
|
||||||
else
|
else
|
||||||
run='🟡未运行'
|
run="$BOT_TG_RUN_OFF"
|
||||||
fi
|
fi
|
||||||
corename=$(echo $crashcore | sed 's/singboxr/SingBoxR/' | sed 's/singbox/SingBox/' | sed 's/clash/Clash/' | sed 's/meta/Mihomo/')
|
corename=$(echo $crashcore | sed 's/singboxr/SingBoxR/' | sed 's/singbox/SingBox/' | sed 's/clash/Clash/' | sed 's/meta/Mihomo/')
|
||||||
TEXT=$(cat <<EOF
|
TEXT=$(cat <<EOF
|
||||||
*欢迎使用ShellCrash!*_${versionsh_l}_
|
*$BOT_TG_WELCOME*_${versionsh_l}_
|
||||||
$corename服务$run
|
$corename$BOT_TG_SERVICE$run
|
||||||
【*$redir_mod*】内存占用:$VmRSS
|
【*$redir_mod*】$BOT_TG_MEM_USED$VmRSS
|
||||||
已运行:$day$time
|
$BOT_TG_RUNNING_TIME$day$time
|
||||||
请选择操作:
|
$BOT_TG_SELECT_ACTION
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
MENU=$(cat <<EOF
|
MENU=$(cat <<EOF
|
||||||
{
|
{
|
||||||
"inline_keyboard":[
|
"inline_keyboard":[
|
||||||
[
|
[
|
||||||
{"text":"✈️ 启用劫持","callback_data":"start_redir"},
|
{"text":"$BOT_TG_BTN_START","callback_data":"start_redir"},
|
||||||
{"text":"💧 纯净模式","callback_data":"stop_redir"},
|
{"text":"$BOT_TG_BTN_PURE","callback_data":"stop_redir"},
|
||||||
{"text":"🕹 重启服务","callback_data":"restart"}
|
{"text":"$BOT_TG_BTN_RESTART","callback_data":"restart"}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{"text":"📄 查看日志","callback_data":"readlog"},
|
{"text":"$BOT_TG_BTN_LOG","callback_data":"readlog"},
|
||||||
{"text":"🔃 文件传输","callback_data":"transport"}
|
{"text":"$BOT_TG_BTN_TRANSFER","callback_data":"transport"}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -85,7 +88,7 @@ web_json_post "$API/sendMessage" "{\"chat_id\":\"$TG_CHATID\",\"text\":\"$TEXT\"
|
|||||||
}
|
}
|
||||||
### --- 文件传输 --- ###
|
### --- 文件传输 --- ###
|
||||||
send_transport_menu(){
|
send_transport_menu(){
|
||||||
TEXT='请选择需要上传或下载的具体文件:'
|
TEXT="$BOT_TG_SELECT_FILE"
|
||||||
if echo "$crashcore" | grep -q 'singbox';then
|
if echo "$crashcore" | grep -q 'singbox';then
|
||||||
config_type=json
|
config_type=json
|
||||||
else
|
else
|
||||||
@@ -95,23 +98,23 @@ send_transport_menu(){
|
|||||||
if curl -h >/dev/null 2>&1;then
|
if curl -h >/dev/null 2>&1;then
|
||||||
CURL_KB=$(cat <<EOF
|
CURL_KB=$(cat <<EOF
|
||||||
[
|
[
|
||||||
{"text":"📥 下载日志","callback_data":"ts_get_log"},
|
{"text":"$BOT_TG_BTN_GET_LOG","callback_data":"ts_get_log"},
|
||||||
{"text":"💾 备份设置","callback_data":"ts_get_bak"},
|
{"text":"$BOT_TG_BTN_GET_BAK","callback_data":"ts_get_bak"},
|
||||||
{"text":"⬇️ 下载配置","callback_data":"ts_get_ccf"}
|
{"text":"$BOT_TG_BTN_GET_CFG","callback_data":"ts_get_ccf"}
|
||||||
],
|
],
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
CURL_KB='[{"text":"⚠️ 因当前设备缺少curl应用,仅支持上传功能!","callback_data":"noop"}],'
|
CURL_KB='[{"text":"$BOT_TG_NO_CURL","callback_data":"noop"}],'
|
||||||
fi
|
fi
|
||||||
MENU=$(cat <<EOF
|
MENU=$(cat <<EOF
|
||||||
{
|
{
|
||||||
"inline_keyboard":[
|
"inline_keyboard":[
|
||||||
$CURL_KB
|
$CURL_KB
|
||||||
[
|
[
|
||||||
{"text":"🪐 上传内核","callback_data":"ts_up_core"},
|
{"text":"$BOT_TG_BTN_UP_CORE","callback_data":"ts_up_core"},
|
||||||
{"text":"🔄 还原设置","callback_data":"ts_up_bak"},
|
{"text":"$BOT_TG_BTN_UP_BAK","callback_data":"ts_up_bak"},
|
||||||
{"text":"⬆️ 上传配置","callback_data":"ts_up_ccf"}
|
{"text":"$BOT_TG_BTN_UP_CFG","callback_data":"ts_up_ccf"}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -125,17 +128,17 @@ process_file(){
|
|||||||
case "$FILE_TYPE" in
|
case "$FILE_TYPE" in
|
||||||
1)
|
1)
|
||||||
. "$CRASHDIR"/libs/core_tools.sh
|
. "$CRASHDIR"/libs/core_tools.sh
|
||||||
core_check "$TMPDIR/$FILE_NAME" && res='成功!即将重启服务!' || res='失败,请仔细检查文件或重试!'
|
core_check "$TMPDIR/$FILE_NAME" && res="$BOT_TG_UPLOAD_OK" || res="$BOT_TG_UPLOAD_FAIL"
|
||||||
send_msg "内核更新$res"
|
send_msg "$BOT_TG_CORE_UPDATE$res"
|
||||||
sleep 2
|
sleep 2
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
tar -zxf "$TMPDIR/$FILE_NAME" -C "$CRASHDIR"/configs && res='配置文件已还原,请手动重启服务!' || res='解压还原失败,请仔细检查文件或重试!'
|
tar -zxf "$TMPDIR/$FILE_NAME" -C "$CRASHDIR"/configs && res="$BOT_TG_CFG_RESTORED" || res="$BOT_TG_RESTORE_FAIL"
|
||||||
send_msg "$res"
|
send_msg "$res"
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
mv -f "$TMPDIR/$FILE_NAME" "$CRASHDIR/${config_type}s/" && res='配置文件已上传,请手动重启服务!' || res='上传失败,请仔细检查文件或重试!'
|
mv -f "$TMPDIR/$FILE_NAME" "$CRASHDIR/${config_type}s/" && res="$BOT_TG_CFG_UPLOADED" || res="$BOT_TG_UPLOAD_FAIL2"
|
||||||
send_msg "$res"
|
send_msg "$res"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -151,10 +154,10 @@ download_file(){
|
|||||||
if [ "$?" = 0 ];then
|
if [ "$?" = 0 ];then
|
||||||
process_file
|
process_file
|
||||||
else
|
else
|
||||||
send_msg "网络错误,上传失败!请重试!"
|
send_msg "$BOT_TG_NET_UPLOAD_FAIL"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
send_msg "文件格式不匹配,上传失败!"
|
send_msg "$BOT_TG_FILE_FORMAT_FAIL"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
### --- 具体操作函数 --- ###
|
### --- 具体操作函数 --- ###
|
||||||
@@ -163,22 +166,22 @@ do_start_fw(){
|
|||||||
redir_mod=$redir_mod_bf
|
redir_mod=$redir_mod_bf
|
||||||
setconfig redir_mod $redir_mod
|
setconfig redir_mod $redir_mod
|
||||||
"$CRASHDIR"/start.sh start_firewall
|
"$CRASHDIR"/start.sh start_firewall
|
||||||
echo "ShellCrash 透明路由*$redir_mod_bf*已启用!" > "$LOGFILE"
|
echo "$BOT_TG_FW_ENABLED*$redir_mod_bf*$BOT_TG_FW_ENABLED_SUFFIX" > "$LOGFILE"
|
||||||
}
|
}
|
||||||
do_stop_fw(){
|
do_stop_fw(){
|
||||||
redir_mod_bf=$redir_mod
|
redir_mod_bf=$redir_mod
|
||||||
firewall_area=4
|
firewall_area=4
|
||||||
setconfig firewall_area 4
|
setconfig firewall_area 4
|
||||||
"$CRASHDIR"/start.sh stop_firewall
|
"$CRASHDIR"/start.sh stop_firewall
|
||||||
echo "ShellCrash 已切换到纯净模式!" > "$LOGFILE"
|
echo "$BOT_TG_SWITCH_PURE" > "$LOGFILE"
|
||||||
}
|
}
|
||||||
do_restart(){
|
do_restart(){
|
||||||
"$CRASHDIR"/start.sh restart
|
"$CRASHDIR"/start.sh restart
|
||||||
echo "ShellCrash 服务已重启!" > "$LOGFILE"
|
echo "$BOT_TG_SERVICE_RESTARTED" > "$LOGFILE"
|
||||||
}
|
}
|
||||||
do_set_sub(){
|
do_set_sub(){
|
||||||
#echo "$1" "$2" >> "$CRASHDIR"/configs/providers.cfg
|
#echo "$1" "$2" >> "$CRASHDIR"/configs/providers.cfg
|
||||||
echo "错误,还未完成的功能!" > "$LOGFILE"
|
echo "$BOT_TG_UNFINISHED" > "$LOGFILE"
|
||||||
|
|
||||||
}
|
}
|
||||||
transport(){ #文件传输
|
transport(){ #文件传输
|
||||||
@@ -204,15 +207,15 @@ transport(){ #文件传输
|
|||||||
;;
|
;;
|
||||||
"ts_up_core")
|
"ts_up_core")
|
||||||
FILE_TYPE=1
|
FILE_TYPE=1
|
||||||
send_msg "请发送需要上传的内核,必须是以tar.gz,.gz或.upx结尾的【${corename}】内核!"
|
send_msg "$BOT_TG_SEND_CORE ${corename} $BOT_TG_SEND_CORE_SUFFIX"
|
||||||
;;
|
;;
|
||||||
"ts_up_bak")
|
"ts_up_bak")
|
||||||
FILE_TYPE=2
|
FILE_TYPE=2
|
||||||
send_msg "请发送需要还原的备份文件,必须是【.tar.gz】格式!"
|
send_msg "$BOT_TG_SEND_BAK"
|
||||||
;;
|
;;
|
||||||
"ts_up_ccf")
|
"ts_up_ccf")
|
||||||
FILE_TYPE=3
|
FILE_TYPE=3
|
||||||
send_msg "请发送需要上传的配置文件,必须是【.${config_type}】格式,支持自定义配置文件"
|
send_msg "$BOT_TG_SEND_CFG .${config_type} $BOT_TG_SEND_CFG_SUFFIX"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
@@ -246,9 +249,9 @@ polling(){
|
|||||||
"start_redir")
|
"start_redir")
|
||||||
if [ "$firewall_area" = 4 ];then
|
if [ "$firewall_area" = 4 ];then
|
||||||
do_start_fw
|
do_start_fw
|
||||||
send_msg "已切换到$redir_mod_bf!"
|
send_msg "$BOT_TG_SWITCH_TO$redir_mod_bf!"
|
||||||
else
|
else
|
||||||
send_msg "当前已经是$redir_mod!"
|
send_msg "$BOT_TG_ALREADY$redir_mod!"
|
||||||
fi
|
fi
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
@@ -256,22 +259,22 @@ polling(){
|
|||||||
"stop_redir")
|
"stop_redir")
|
||||||
if [ "$firewall_area" != 4 ];then
|
if [ "$firewall_area" != 4 ];then
|
||||||
do_stop_fw
|
do_stop_fw
|
||||||
send_msg "已切换到纯净模式"
|
send_msg "$BOT_TG_SWITCH_PURE"
|
||||||
else
|
else
|
||||||
send_msg "当前已经是纯净模式!"
|
send_msg "$BOT_TG_ALREADY_PURE"
|
||||||
fi
|
fi
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
"restart")
|
"restart")
|
||||||
do_restart
|
do_restart
|
||||||
send_msg "🔄 服务已重启"
|
send_msg "$BOT_TG_SERVICE_RESTARTED_SHORT"
|
||||||
sleep 10
|
sleep 10
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
"readlog")
|
"readlog")
|
||||||
send_msg "📄 日志内容如下(已过滤任务日志):\n\`\`\`$(grep -v '任务' $TMPDIR/ShellCrash.log |tail -n 20)\`\`\`"
|
send_msg "$BOT_TG_LOG_CONTENT\n\`\`\`$(grep -v "$BOT_TG_TASK_WORD" $TMPDIR/ShellCrash.log |tail -n 20)\`\`\`"
|
||||||
sleep 3
|
sleep 3
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
@@ -282,7 +285,7 @@ polling(){
|
|||||||
;;
|
;;
|
||||||
"set_sub")
|
"set_sub")
|
||||||
echo "await_sub" > "$STATE_FILE"
|
echo "await_sub" > "$STATE_FILE"
|
||||||
send_msg "✏ 请输入新的订阅链接:"
|
send_msg "$BOT_TG_INPUT_SUB"
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
ts_*)
|
ts_*)
|
||||||
@@ -298,7 +301,7 @@ polling(){
|
|||||||
if [ "$(cat "$STATE_FILE" 2>/dev/null)" = "await_sub" ]; then
|
if [ "$(cat "$STATE_FILE" 2>/dev/null)" = "await_sub" ]; then
|
||||||
echo "" > "$STATE_FILE"
|
echo "" > "$STATE_FILE"
|
||||||
do_set_sub "$TEXT"
|
do_set_sub "$TEXT"
|
||||||
send_msg "订阅更新完成:\n$(cat "$LOGFILE")"
|
send_msg "$BOT_TG_SUB_UPDATED\n$(cat "$LOGFILE")"
|
||||||
send_menu
|
send_menu
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -2,16 +2,18 @@
|
|||||||
|
|
||||||
. "$CRASHDIR"/libs/web_get_lite.sh
|
. "$CRASHDIR"/libs/web_get_lite.sh
|
||||||
|
|
||||||
|
load_lang bot_tg
|
||||||
|
|
||||||
private_bot() {
|
private_bot() {
|
||||||
comp_box "请先通过 \033[32;4mhttps://t.me/BotFather\033[0m 申请TG机器人并获取其\033[36mAPI TOKEN\033[0m"
|
comp_box "$BOT_TG_PRIVATE_HINT"
|
||||||
read -r -p "请输入你获取到的API TOKEN> " TOKEN
|
read -r -p "$BOT_TG_INPUT_TOKEN> " TOKEN
|
||||||
url_tg=https://api.telegram.org/bot${TOKEN}/getUpdates
|
url_tg=https://api.telegram.org/bot${TOKEN}/getUpdates
|
||||||
|
|
||||||
top_box "请向\033[32m你申请的机器人\033[33m而不是BotFather!\033[0m"
|
top_box "$BOT_TG_PRIVATE_TOP"
|
||||||
}
|
}
|
||||||
|
|
||||||
public_bot() {
|
public_bot() {
|
||||||
comp_box "请向机器人:\033[32;4mhttps://t.me/ShellCrashtg_bot\033[0m"
|
comp_box "$BOT_TG_PUBLIC_HINT"
|
||||||
TOKEN=publictoken
|
TOKEN=publictoken
|
||||||
url_tg=https://tgbot.jwsc.eu.org/publictoken/getUpdates
|
url_tg=https://tgbot.jwsc.eu.org/publictoken/getUpdates
|
||||||
}
|
}
|
||||||
@@ -20,7 +22,7 @@ tg_push_token() {
|
|||||||
push_TG="$TOKEN"
|
push_TG="$TOKEN"
|
||||||
setconfig push_TG "$TOKEN"
|
setconfig push_TG "$TOKEN"
|
||||||
setconfig chat_ID "$chat_ID"
|
setconfig chat_ID "$chat_ID"
|
||||||
. "$CRASHDIR"/libs/logger.sh && logger "已完成Telegram日志推送设置!" 32
|
. "$CRASHDIR"/libs/logger.sh && logger "$BOT_TG_SET_DONE" 32
|
||||||
}
|
}
|
||||||
|
|
||||||
get_chatid() {
|
get_chatid() {
|
||||||
@@ -28,7 +30,7 @@ get_chatid() {
|
|||||||
chat_ID=''
|
chat_ID=''
|
||||||
while [ $i -le 3 ] && [ -z "$chat_ID" ]; do
|
while [ $i -le 3 ] && [ -z "$chat_ID" ]; do
|
||||||
sleep 1
|
sleep 1
|
||||||
comp_box "\033[33m第 $i 次尝试获取对话ID失败,正在重试...\033[0m"
|
comp_box "\033[33m$BOT_TG_CHATID_RETRY_PREFIX $i $BOT_TG_CHATID_RETRY_SUFFIX\033[0m"
|
||||||
chat=$(web_get_lite "$url_tg" 2>/dev/null)
|
chat=$(web_get_lite "$url_tg" 2>/dev/null)
|
||||||
if [ -n "$chat" ]; then
|
if [ -n "$chat" ]; then
|
||||||
chat_ID=$(echo "$chat" | sed 's/"update_id":/{\n"update_id":/g' | grep "$public_key" | head -n1 | grep -oE '"id":.*,"is_bot' | sed s'/"id"://' | sed s'/,"is_bot//')
|
chat_ID=$(echo "$chat" | sed 's/"update_id":/{\n"update_id":/g' | grep "$public_key" | head -n1 | grep -oE '"id":.*,"is_bot' | sed s'/"id"://' | sed s'/,"is_bot//')
|
||||||
@@ -39,19 +41,19 @@ get_chatid() {
|
|||||||
|
|
||||||
set_bot() {
|
set_bot() {
|
||||||
public_key=$(cat /proc/sys/kernel/random/boot_id | sed 's/.*-//')
|
public_key=$(cat /proc/sys/kernel/random/boot_id | sed 's/.*-//')
|
||||||
btm_box "发送此秘钥: \033[30;46m$public_key\033[0m"
|
btm_box "$BOT_TG_SEND_KEY \033[30;46m$public_key\033[0m"
|
||||||
read -r -p "我已经发送完成(1/0)> " res
|
read -r -p "$BOT_TG_SENT_CONFIRM(1/0)> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
get_chatid
|
get_chatid
|
||||||
[ -z "$chat_ID" ] && [ "$TOKEN" != 'publictoken' ] && {
|
[ -z "$chat_ID" ] && [ "$TOKEN" != 'publictoken' ] && {
|
||||||
comp_box "\033[31m无法获取对话ID,请返回重新设置或手动输入ChatID!\033[0m" \
|
comp_box "\033[31m$BOT_TG_CHATID_FAIL\033[0m" \
|
||||||
"通常访问 \033[32;4m$url_tg\033[0m \n\033[36m即可看到ChatID\033[0m"
|
"$BOT_TG_CHATID_MANUAL_HINT \033[32;4m$url_tg\033[0m \n\033[36m$BOT_TG_CHATID_MANUAL_HINT2\033[0m"
|
||||||
read -r -p "请手动输入ChatID> " chat_ID
|
read -r -p "$BOT_TG_INPUT_CHATID> " chat_ID
|
||||||
}
|
}
|
||||||
if echo "$chat_ID" | grep -qE '^[0-9]{8,}$'; then
|
if echo "$chat_ID" | grep -qE '^[0-9]{8,}$'; then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m无法获取对话ID,请重新配置!\033[0m"
|
msg_alert "\033[31m$BOT_TG_CHATID_RECONFIG\033[0m"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
. "$CRASHDIR"/libs/set_cron.sh
|
. "$CRASHDIR"/libs/set_cron.sh
|
||||||
|
|
||||||
|
load_lang bot_tg
|
||||||
|
|
||||||
bot_tg_start(){
|
bot_tg_start(){
|
||||||
. "$CRASHDIR"/starts/start_legacy.sh
|
. "$CRASHDIR"/starts/start_legacy.sh
|
||||||
start_legacy "$CRASHDIR/menus/bot_tg.sh" 'bot_tg'
|
start_legacy "$CRASHDIR/menus/bot_tg.sh" 'bot_tg'
|
||||||
@@ -12,5 +14,5 @@ bot_tg_stop(){
|
|||||||
rm -f "$TMPDIR/bot_tg.pid"
|
rm -f "$TMPDIR/bot_tg.pid"
|
||||||
}
|
}
|
||||||
bot_tg_cron(){
|
bot_tg_cron(){
|
||||||
cronset 'TG_BOT守护进程' "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #ShellCrash-TG_BOT守护进程"
|
cronset "$BOT_TG_CRON_NAME" "* * * * * /bin/sh $CRASHDIR/starts/start_legacy_wd.sh bot_tg #$BOT_TG_CRON_NAME"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) Juewuy
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
|
load_lang check_port
|
||||||
|
|
||||||
check_port() {
|
check_port() {
|
||||||
if [ "$1" -gt 65535 ] || [ "$1" -le 1 ]; then
|
if [ "$1" -gt 65535 ] || [ "$1" -le 1 ]; then
|
||||||
msg_alert "\033[31m输入错误!请输入正确的数值(1-65535)!\033[0m"
|
msg_alert "\033[31m$CHECK_PORT_RANGE_ERR\033[0m"
|
||||||
return 1
|
return 1
|
||||||
elif echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$1|"; then
|
elif echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$1|"; then
|
||||||
msg_alert "\033[31m输入错误!请不要输入重复的端口!\033[0m"
|
msg_alert "\033[31m$CHECK_PORT_DUP_ERR\033[0m"
|
||||||
return 1
|
return 1
|
||||||
elif netstat -ntul | grep -q ":$1[[:space:]]"; then
|
elif netstat -ntul | grep -q ":$1[[:space:]]"; then
|
||||||
msg_alert "\033[31m当前端口已被其他进程占用,请重新输入!\033[0m"
|
msg_alert "\033[31m$CHECK_PORT_OCCUPIED_ERR\033[0m"
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
# Copyright (C) Juewuy
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
|
load_lang ddns
|
||||||
|
|
||||||
ddns_menu() {
|
ddns_menu() {
|
||||||
top_box "\033[30;46m欢迎使用DDNS!\033[0m"
|
top_box "\033[30;46m$DDNS_WELCOME\033[0m"
|
||||||
load_ddns
|
load_ddns
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,36 +30,36 @@ config service '$service'
|
|||||||
EOF
|
EOF
|
||||||
/usr/lib/ddns/dynamic_dns_updater.sh -S "$service" start >/dev/null 2>&1 &
|
/usr/lib/ddns/dynamic_dns_updater.sh -S "$service" start >/dev/null 2>&1 &
|
||||||
sleep 3
|
sleep 3
|
||||||
msg_alert "服务已经添加!"
|
msg_alert "$DDNS_ADD_DONE"
|
||||||
}
|
}
|
||||||
|
|
||||||
set_ddns() {
|
set_ddns() {
|
||||||
while true; do
|
while true; do
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入你的域名> " str
|
read -r -p "$DDNS_INPUT_DOMAIN> " str
|
||||||
[ -z "$str" ] && domain="$domain" || domain="$str"
|
[ -z "$str" ] && domain="$domain" || domain="$str"
|
||||||
echo ""
|
echo ""
|
||||||
read -r -p "请输入用户名或邮箱> " str
|
read -r -p "$DDNS_INPUT_USER> " str
|
||||||
[ -z "$str" ] && username="$username" || username="$str"
|
[ -z "$str" ] && username="$username" || username="$str"
|
||||||
echo ""
|
echo ""
|
||||||
read -r -p "请输入密码或令牌秘钥> " str
|
read -r -p "$DDNS_INPUT_PASS> " str
|
||||||
[ -z "$str" ] && password="$password" || password="$str"
|
[ -z "$str" ] && password="$password" || password="$str"
|
||||||
echo ""
|
echo ""
|
||||||
read -r -p "请输入检测更新间隔(单位:分钟;默认为10)> " check_interval
|
read -r -p "$DDNS_INPUT_CHECK_INTERVAL> " check_interval
|
||||||
[ -z "$check_interval" ] || [ "$check_interval" -lt 1 -o "$check_interval" -gt 1440 ] && check_interval=10
|
[ -z "$check_interval" ] || [ "$check_interval" -lt 1 -o "$check_interval" -gt 1440 ] && check_interval=10
|
||||||
echo ""
|
echo ""
|
||||||
read -r -p "请输入强制更新间隔(单位:小时;默认为24)> " force_interval
|
read -r -p "$DDNS_INPUT_FORCE_INTERVAL> " force_interval
|
||||||
[ -z "$force_interval" ] || [ "$force_interval" -lt 1 -o "$force_interval" -gt 240 ] && force_interval=24
|
[ -z "$force_interval" ] || [ "$force_interval" -lt 1 -o "$force_interval" -gt 240 ] && force_interval=24
|
||||||
|
|
||||||
comp_box "请核对如下信息:" \
|
comp_box "$DDNS_CONFIRM_INFO" \
|
||||||
"" \
|
"" \
|
||||||
"服务商: \033[32m$service\033[0m" \
|
"$DDNS_FIELD_SERVICE \033[32m$service\033[0m" \
|
||||||
"域名: \033[32m$domain\033[0m" \
|
"$DDNS_FIELD_DOMAIN \033[32m$domain\033[0m" \
|
||||||
"用户名: \033[32m$username\033[0m" \
|
"$DDNS_FIELD_USER \033[32m$username\033[0m" \
|
||||||
"检测间隔: \033[32m$check_interval\033[0m"
|
"$DDNS_FIELD_INTERVAL \033[32m$check_interval\033[0m"
|
||||||
btm_box "是否确认添加:"
|
btm_box "$DDNS_CONFIRM_ADD"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $DDNS_YES" \
|
||||||
"0) 否,重新輸入"
|
"0) $DDNS_REINPUT"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
add_ddns
|
add_ddns
|
||||||
@@ -72,17 +74,17 @@ set_ddns_service() {
|
|||||||
[ -s "$services_dir" ] || services_dir=/etc/ddns/services
|
[ -s "$services_dir" ] || services_dir=/etc/ddns/services
|
||||||
[ -s "$services_dir" ] || services_dir=/usr/share/ddns/list
|
[ -s "$services_dir" ] || services_dir=/usr/share/ddns/list
|
||||||
[ -s "$services_dir" ] || {
|
[ -s "$services_dir" ] || {
|
||||||
msg_alert "\033[33m未找到DDNS列表文件,尝试在线获取……\033[0m"
|
msg_alert "\033[33m$DDNS_LIST_NOT_FOUND\033[0m"
|
||||||
ddns service update >/dev/null || msg_alert "\033[31m下载失败,请重试!\033[0m"
|
ddns service update >/dev/null || msg_alert "\033[31m$DDNS_DOWNLOAD_FAILED\033[0m"
|
||||||
}
|
}
|
||||||
comp_box "\033[32m请选择服务提供商:\033[0m"
|
comp_box "\033[32m$DDNS_SELECT_PROVIDER\033[0m"
|
||||||
|
|
||||||
list=$(awk '/^#/ || !NF {next} {print $1}' "$services_dir")
|
list=$(awk '/^#/ || !NF {next} {print $1}' "$services_dir")
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
|
|
||||||
nr=$(echo "$list" | wc -l)
|
nr=$(echo "$list" | wc -l)
|
||||||
common_back
|
common_back
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
if [ -z "$num" ] || [ "$num" = 0 ]; then
|
if [ -z "$num" ] || [ "$num" = 0 ]; then
|
||||||
i=
|
i=
|
||||||
break
|
break
|
||||||
@@ -92,19 +94,19 @@ set_ddns_service() {
|
|||||||
set_ddns
|
set_ddns
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m输入错误,请重新输入!\033[0m"
|
msg_alert "\033[33m$DDNS_INPUT_ERROR\033[0m"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
set_ddns_type() {
|
set_ddns_type() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[32m请选择网络模式:\033[0m"
|
comp_box "\033[32m$DDNS_SELECT_NETMODE\033[0m"
|
||||||
btm_box "1) \033[36mIPV4\033[0m" \
|
btm_box "1) \033[36m$DDNS_IPV4\033[0m" \
|
||||||
"2) \033[36mIPV6\033[0m" \
|
"2) \033[36m$DDNS_IPV6\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -122,7 +124,7 @@ set_ddns_type() {
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
msg_alert "\033[33m输入错误,请重新输入!\033[0m"
|
msg_alert "\033[33m$DDNS_INPUT_ERROR\033[0m"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -131,15 +133,15 @@ set_ddns_type() {
|
|||||||
rev_ddns_service() {
|
rev_ddns_service() {
|
||||||
while true; do
|
while true; do
|
||||||
enabled=$(uci get ddns."$service".enabled)
|
enabled=$(uci get ddns."$service".enabled)
|
||||||
[ "$enabled" = 1 ] && enabled_b="停用" || enabled_b="启用"
|
[ "$enabled" = 1 ] && enabled_b="$DDNS_DISABLE" || enabled_b="$DDNS_ENABLE"
|
||||||
comp_box "1) \033[32m立即更新\033[0m" \
|
comp_box "1) \033[32m$DDNS_UPDATE_NOW\033[0m" \
|
||||||
"2) 编辑当前服务" \
|
"2) $DDNS_EDIT_CURRENT" \
|
||||||
"3) $enabled_b当前服务" \
|
"3) $enabled_b$DDNS_CURRENT_SERVICE" \
|
||||||
"4) 移除当前服务" \
|
"4) $DDNS_REMOVE_CURRENT" \
|
||||||
"5) 查看运行日志" \
|
"5) $DDNS_VIEW_LOG" \
|
||||||
"" \
|
"" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -176,7 +178,7 @@ rev_ddns_service() {
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
msg_alert "\033[33m输入错误,请重新输入!\033[0m"
|
msg_alert "\033[33m$DDNS_INPUT_ERROR\033[0m"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -187,14 +189,14 @@ load_ddns() {
|
|||||||
ddns_dir=/etc/config/ddns
|
ddns_dir=/etc/config/ddns
|
||||||
tmp_dir="$TMPDIR"/ddns
|
tmp_dir="$TMPDIR"/ddns
|
||||||
[ ! -f "$ddns_dir" ] && {
|
[ ! -f "$ddns_dir" ] && {
|
||||||
btm_box "\033[31m本脚本依赖OpenWrt内置的DDNS服务,当前设备无法运行,已退出!\033[0m"
|
btm_box "\033[31m$DDNS_NOT_SUPPORTED\033[0m"
|
||||||
sleep 1
|
sleep 1
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
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"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
content_line " 列表 域名 启用 IP地址"
|
content_line "$DDNS_LIST_HEADER"
|
||||||
content_line ""
|
content_line ""
|
||||||
[ -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
|
||||||
@@ -204,10 +206,10 @@ load_ddns() {
|
|||||||
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 "'\"")
|
||||||
content_line "$nr) $domain $enabled $local_ip"
|
content_line "$nr) $domain $enabled $local_ip"
|
||||||
done
|
done
|
||||||
content_line "$((nr + 1))) 添加DDNS服务"
|
content_line "$((nr + 1))) $DDNS_ADD_SERVICE"
|
||||||
content_line "0) 退出"
|
content_line "0) $DDNS_EXIT"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入对应序号> " num
|
read -r -p "$DDNS_INPUT_INDEX> " num
|
||||||
if [ -z "$num" ] || [ "$num" = 0 ]; then
|
if [ -z "$num" ] || [ "$num" = 0 ]; then
|
||||||
i=
|
i=
|
||||||
rm -rf "$tmp_dir"
|
rm -rf "$tmp_dir"
|
||||||
@@ -218,7 +220,7 @@ load_ddns() {
|
|||||||
service=$(cat "$tmp_dir" | sed -n "$num"p)
|
service=$(cat "$tmp_dir" | sed -n "$num"p)
|
||||||
rev_ddns_service
|
rev_ddns_service
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m请输入正确数字!\033[0m"
|
msg_alert "\033[33m$DDNS_INPUT_NUM_ERROR\033[0m"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ set_dns_mod() {
|
|||||||
[ -z "$ecs_subnet" ] && ecs_subnet=OFF
|
[ -z "$ecs_subnet" ] && ecs_subnet=OFF
|
||||||
comp_box "$DNS_CURRENT_MODE\033[47;30m $dns_mod \033[0m" \
|
comp_box "$DNS_CURRENT_MODE\033[47;30m $dns_mod \033[0m" \
|
||||||
"\033[33m$DNS_RESTART_NOTICE\033[0m"
|
"\033[33m$DNS_RESTART_NOTICE\033[0m"
|
||||||
content_line "1) 设为MIX$COMMON_MOD:\t\033[32m$DNS_MODE_MIX_DESC\033[0m"
|
content_line "1) $DNS_SET_TO MIX$COMMON_MOD:\t\033[32m$DNS_MODE_MIX_DESC\033[0m"
|
||||||
content_line "2) 设为Route$COMMON_MOD:\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m"
|
content_line "2) $DNS_SET_TO Route$COMMON_MOD:\t\033[32m$DNS_MODE_ROUTE_DESC\033[0m"
|
||||||
content_line "3) 设为Redir$COMMON_MOD:\t\033[33m$DNS_MODE_REDIR_DESC\033[0m"
|
content_line "3) $DNS_SET_TO Redir$COMMON_MOD:\t\033[33m$DNS_MODE_REDIR_DESC\033[0m"
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "4) $DNS_MENU_PROTECT:\t \033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC"
|
content_line "4) $DNS_MENU_PROTECT:\t \033[36m$dns_protect\033[0m\t$DNS_PROTECT_DESC"
|
||||||
content_line "5) $DNS_MENU_HOSTS:\t \033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC"
|
content_line "5) $DNS_MENU_HOSTS:\t \033[36m$hosts_opt\033[0m\t$DNS_HOSTS_DESC"
|
||||||
@@ -52,14 +52,14 @@ set_dns_mod() {
|
|||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ "$dns_protect" = ON ]; then
|
if [ "$dns_protect" = ON ]; then
|
||||||
content_line "当前\033[33m已启用\033[0mDNS防泄漏,是否确认禁用?"
|
content_line "$DNS_PROTECT_NOW\033[33m$DNS_ENABLED\033[0m$DNS_PROTECT_DISABLE_Q"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已禁用\033[0mDNS防泄漏,是否确认启用?"
|
content_line "$DNS_PROTECT_NOW\033[33m$DNS_DISABLED\033[0m$DNS_PROTECT_ENABLE_Q"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "1) 是" \
|
btm_box "1) $DNS_YES" \
|
||||||
"2) 重置为默认值" \
|
"2) $DNS_RESET_DEFAULT" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $DNS_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
@@ -89,14 +89,14 @@ set_dns_mod() {
|
|||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ "$hosts_opt" = ON ]; then
|
if [ "$hosts_opt" = ON ]; then
|
||||||
content_line "当前\033[33m已启用\033[0mHosts优化,是否确认禁用?"
|
content_line "$DNS_HOSTS_NOW\033[33m$DNS_ENABLED\033[0m$DNS_HOSTS_DISABLE_Q"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已禁用\033[0mHosts优化,是否确认启用?"
|
content_line "$DNS_HOSTS_NOW\033[33m$DNS_DISABLED\033[0m$DNS_HOSTS_ENABLE_Q"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "1) 是" \
|
btm_box "1) $DNS_YES" \
|
||||||
"2) 重置为默认值" \
|
"2) $DNS_RESET_DEFAULT" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $DNS_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
@@ -127,14 +127,14 @@ set_dns_mod() {
|
|||||||
line_break
|
line_break
|
||||||
separator_line "="
|
separator_line "="
|
||||||
if [ "$ecs_subnet" = ON ]; then
|
if [ "$ecs_subnet" = ON ]; then
|
||||||
content_line "当前\033[33m已启用\033[0mHosts优化,是否确认禁用?"
|
content_line "$DNS_HOSTS_NOW\033[33m$DNS_ENABLED\033[0m$DNS_HOSTS_DISABLE_Q"
|
||||||
else
|
else
|
||||||
content_line "当前\033[33m已禁用\033[0mHosts优化,是否确认启用?"
|
content_line "$DNS_HOSTS_NOW\033[33m$DNS_DISABLED\033[0m$DNS_HOSTS_ENABLE_Q"
|
||||||
fi
|
fi
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "1) 是" \
|
btm_box "1) $DNS_YES" \
|
||||||
"2) 重置为默认值" \
|
"2) $DNS_RESET_DEFAULT" \
|
||||||
"0) 否,返回上级菜单"
|
"0) $DNS_NO_BACK"
|
||||||
read -r -p "$COMMON_INPUT> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
@@ -164,10 +164,10 @@ set_dns_mod() {
|
|||||||
comp_box "\033[31m$DNS_REDIR_WARN\033[0m" \
|
comp_box "\033[31m$DNS_REDIR_WARN\033[0m" \
|
||||||
"\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m" \
|
"\033[33m$DNS_REDIR_HINT 127.0.0.1:$dns_port\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"\033[36m请直接输入旁路由IPV4地址\033[0m" \
|
"\033[36m$DNS_INPUT_REDIR_PORT\033[0m" \
|
||||||
"或输入 r 重置DNS劫持端口" \
|
"$DNS_INPUT_REDIR_RESET" \
|
||||||
"或输入 0 返回上级菜单"
|
"$DNS_INPUT_REDIR_BACK"
|
||||||
read -r -p "请输入> " num
|
read -r -p "$DNS_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
break
|
break
|
||||||
@@ -224,7 +224,7 @@ fake_ip_filter() {
|
|||||||
content_line "\033[33m$DNS_FAKEIP_EMPTY\033[0m"
|
content_line "\033[33m$DNS_FAKEIP_EMPTY\033[0m"
|
||||||
fi
|
fi
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$DNS_FAKEIP_EDIT> " input
|
read -r -p "$DNS_FAKEIP_EDIT> " input
|
||||||
case "$input" in
|
case "$input" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
@@ -233,20 +233,20 @@ fake_ip_filter() {
|
|||||||
*)
|
*)
|
||||||
if [ "$input" -ge 1 ] 2>/dev/null; then
|
if [ "$input" -ge 1 ] 2>/dev/null; then
|
||||||
if sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter"; then
|
if sed -i "${input}d" "$CRASHDIR/configs/fake_ip_filter"; then
|
||||||
msg_alert "\033[32m移除成功\033[0m"
|
msg_alert "\033[32m$DNS_REMOVE_OK\033[0m"
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m移除失败\033[0m"
|
msg_alert "\033[31m$DNS_REMOVE_FAIL\033[0m"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
comp_box "请确认需要添加的地址:\033[32m$input\033[0m"
|
comp_box "$DNS_CONFIRM_ADD\033[32m$input\033[0m"
|
||||||
btm_box "1) 确认无误" \
|
btm_box "1) $DNS_CONFIRM_OK" \
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "$COMMON_INPUT>" res
|
read -r -p "$COMMON_INPUT>" res
|
||||||
if [ "$res" = 1 ]; then
|
if [ "$res" = 1 ]; then
|
||||||
if echo "$input" >>"$CRASHDIR/configs/fake_ip_filter"; then
|
if echo "$input" >>"$CRASHDIR/configs/fake_ip_filter"; then
|
||||||
msg_alert "\033[32m添加成功\033[0m"
|
msg_alert "\033[32m$DNS_ADD_OK\033[0m"
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m添加失败\033[0m"
|
msg_alert "\033[31m$DNS_ADD_FAIL\033[0m"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
break
|
break
|
||||||
@@ -286,11 +286,11 @@ set_dns_adv() {
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
comp_box "当前DIRECT-DNS:\033[32m$dns_nameserver\033[0m"
|
comp_box "$DNS_DIRECT_NOW\033[32m$dns_nameserver\033[0m"
|
||||||
btm_box "\033[36m请直接输入新的DIRECT-DNS地址\033[0m" \
|
btm_box "\033[36m$DNS_INPUT_DIRECT_NEW\033[0m" \
|
||||||
"或输入 r 重置DIRECT-DNS地址" \
|
"$DNS_INPUT_DIRECT_RESET" \
|
||||||
"或输入 0 返回上级菜单"
|
"$DNS_INPUT_REDIR_BACK"
|
||||||
read -r -p "请输入> " res
|
read -r -p "$DNS_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
0)
|
0)
|
||||||
continue
|
continue
|
||||||
@@ -312,11 +312,11 @@ set_dns_adv() {
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
comp_box "当前PROXY-DNS:\033[32m$dns_fallback\033[0m"
|
comp_box "$DNS_PROXY_NOW\033[32m$dns_fallback\033[0m"
|
||||||
btm_box "\033[36m请直接输入新的PROXY-DNS地址\033[0m" \
|
btm_box "\033[36m$DNS_INPUT_PROXY_NEW\033[0m" \
|
||||||
"或输入 r 重置PROXY-DNS地址" \
|
"$DNS_INPUT_PROXY_RESET" \
|
||||||
"或输入 0 返回上级菜单"
|
"$DNS_INPUT_REDIR_BACK"
|
||||||
read -r -p "请输入> " res
|
read -r -p "$DNS_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
0)
|
0)
|
||||||
continue
|
continue
|
||||||
@@ -338,12 +338,12 @@ set_dns_adv() {
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
comp_box "当前DEFAULT-DNS:\033[32m$dns_resolver\033[0m"
|
comp_box "$DNS_DEFAULT_NOW\033[32m$dns_resolver\033[0m"
|
||||||
btm_box "\033[36m请直接输入新的DEFAULT-DNS地址\033[0m" \
|
btm_box "\033[36m$DNS_INPUT_DEFAULT_NEW\033[0m" \
|
||||||
"或输入 r 重置DEFAULT-DNS地址" \
|
"$DNS_INPUT_DEFAULT_RESET" \
|
||||||
"或输入 0 返回上级菜单"
|
"$DNS_INPUT_REDIR_BACK"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入> " res
|
read -r -p "$DNS_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
0)
|
0)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_MODULE_PROVIDERS" ] && return
|
[ -n "$__IS_MODULE_PROVIDERS" ] && return
|
||||||
__IS_MODULE_PROVIDERS=1
|
__IS_MODULE_PROVIDERS=1
|
||||||
|
|
||||||
|
load_lang providers
|
||||||
|
|
||||||
if [ "$crashcore" = singboxr ]; then
|
if [ "$crashcore" = singboxr ]; then
|
||||||
CORE_TYPE=singbox
|
CORE_TYPE=singbox
|
||||||
else
|
else
|
||||||
@@ -21,12 +23,12 @@ providers() {
|
|||||||
[ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file
|
[ -z "$provider_temp_des" ] && provider_temp_des=$provider_temp_file
|
||||||
fi
|
fi
|
||||||
|
|
||||||
comp_box "1) \033[32m生成\033[0m包含全部提供者的配置文件" \
|
comp_box "1) \033[32m$PROVIDERS_MENU_GEN\033[0m" \
|
||||||
"2) 选择\033[33m规则模版\033[0m \033[32m$provider_temp_des\033[0m" \
|
"2) $PROVIDERS_MENU_TEMPLATE \033[32m$provider_temp_des\033[0m" \
|
||||||
"3) \033[33m清理\033[0mproviders目录文件" \
|
"3) $PROVIDERS_MENU_CLEAN" \
|
||||||
"" \
|
"" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应字母或数字> " num
|
read -r -p "$PROVIDERS_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -36,25 +38,25 @@ providers() {
|
|||||||
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
. "$CRASHDIR/menus/providers_$CORE_TYPE.sh"
|
||||||
gen_providers
|
gen_providers
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m你还未添加链接或本地配置文件,请先添加!\033[0m"
|
msg_alert "\033[31m$PROVIDERS_EMPTY_HINT\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
list=$(cat "$CRASHDIR/configs/${CORE_TYPE}_providers.list" | awk '{print $1}')
|
list=$(cat "$CRASHDIR/configs/${CORE_TYPE}_providers.list" | awk '{print $1}')
|
||||||
|
|
||||||
comp_box "当前规则模版为:\033[32m$provider_temp_des\033[0m" \
|
comp_box "$PROVIDERS_TEMPLATE_CURRENT\033[32m$provider_temp_des\033[0m" \
|
||||||
"\033[33m请选择在线模版:\033[0m"
|
"\033[33m$PROVIDERS_TEMPLATE_SELECT\033[0m"
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
btm_box "" \
|
btm_box "" \
|
||||||
"a) 使用\033[36m本地模版\033[0m" \
|
"a) $PROVIDERS_TEMPLATE_LOCAL" \
|
||||||
"" \
|
"" \
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应字母或数字> " num
|
read -r -p "$PROVIDERS_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0) ;;
|
"" | 0) ;;
|
||||||
a)
|
a)
|
||||||
line_break
|
line_break
|
||||||
read -r -p "请输入模版的路径(绝对路径)> " dir
|
read -r -p "$PROVIDERS_TEMPLATE_PATH> " dir
|
||||||
if [ -s "$dir" ]; then
|
if [ -s "$dir" ]; then
|
||||||
provider_temp_file=$dir
|
provider_temp_file=$dir
|
||||||
if setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file"; then
|
if setconfig provider_temp_"$CORE_TYPE" "$provider_temp_file"; then
|
||||||
@@ -63,7 +65,7 @@ providers() {
|
|||||||
common_failed
|
common_failed
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m输入错误,找不到对应模版文件!\033[0m"
|
msg_alert "\033[31m$PROVIDERS_TEMPLATE_NOT_FOUND\033[0m"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -81,11 +83,11 @@ providers() {
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
comp_box "\033[33m将清空 $CRASHDIR/providers 目录下所有内容\033[0m" \
|
comp_box "\033[33m$PROVIDERS_CLEAN_WARN $CRASHDIR/providers $PROVIDERS_CLEAN_WARN_END\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"是否继续?"
|
"$PROVIDERS_CLEAN_CONFIRM"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $PROVIDERS_YES" \
|
||||||
"0) 否"
|
"0) $PROVIDERS_NO"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = "1" ]; then
|
if [ "$res" = "1" ]; then
|
||||||
if rm -rf "$CRASHDIR"/providers; then
|
if rm -rf "$CRASHDIR"/providers; then
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_PROVIDERS_CLASH" ] && return
|
[ -n "$__IS_PROVIDERS_CLASH" ] && return
|
||||||
__IS_PROVIDERS_CLASH=1
|
__IS_PROVIDERS_CLASH=1
|
||||||
|
|
||||||
|
load_lang providers
|
||||||
|
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
|
||||||
# 生成clash的providers配置文件
|
# 生成clash的providers配置文件
|
||||||
@@ -17,10 +19,10 @@ gen_providers() {
|
|||||||
if [ -s "$provider_temp_file" ]; then
|
if [ -s "$provider_temp_file" ]; then
|
||||||
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m正在获取在线模版......\033[0m"
|
msg_alert "\033[33m$PROVIDERS_FETCHING_TEMPLATE\033[0m"
|
||||||
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
|
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
|
||||||
[ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && {
|
[ -z "$(grep -o 'rules' "$TMPDIR"/provider_temp_file)" ] && {
|
||||||
msg_alert "\033[31m下载失败,请尝试更换安装源!\033[0m"
|
msg_alert "\033[31m$PROVIDERS_DOWNLOAD_FAILED\033[0m"
|
||||||
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
||||||
setproviders
|
setproviders
|
||||||
}
|
}
|
||||||
@@ -61,21 +63,21 @@ gen_providers() {
|
|||||||
# 调用内核测试
|
# 调用内核测试
|
||||||
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml
|
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore -t -d "$BINDIR" -f "$TMPDIR"/config.yaml
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
msg_alert "\033[32m配置文件生成成功!\033[0m"
|
msg_alert "\033[32m$PROVIDERS_GEN_OK\033[0m"
|
||||||
mkdir -p "$CRASHDIR"/yamls
|
mkdir -p "$CRASHDIR"/yamls
|
||||||
mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml
|
mv -f "$TMPDIR"/config.yaml "$CRASHDIR"/yamls/config.yaml
|
||||||
comp_box "是否立即启动/重启服务?"
|
comp_box "$PROVIDERS_RESTART_ASK"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $PROVIDERS_YES" \
|
||||||
"0) 否"
|
"0) $PROVIDERS_NO"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅'
|
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset "$PROVIDERS_CRON_SUB_UPDATE"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
rm -rf "$TMPDIR"/CrashCore
|
rm -rf "$TMPDIR"/CrashCore
|
||||||
rm -rf "$TMPDIR"/config.yaml
|
rm -rf "$TMPDIR"/config.yaml
|
||||||
msg_alert "\033[31m生成配置文件出错,请仔细检查输入!\033[0m"
|
msg_alert "\033[31m$PROVIDERS_GEN_FAILED\033[0m"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
[ -n "$__IS_PROVIDERS_SINGBOX" ] && return
|
[ -n "$__IS_PROVIDERS_SINGBOX" ] && return
|
||||||
__IS_PROVIDERS_SINGBOX=1
|
__IS_PROVIDERS_SINGBOX=1
|
||||||
|
|
||||||
|
load_lang providers
|
||||||
|
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
|
|
||||||
# 生成singbox的providers配置文件
|
# 生成singbox的providers配置文件
|
||||||
@@ -16,10 +18,10 @@ gen_providers() {
|
|||||||
if [ -s "$provider_temp_file" ]; then
|
if [ -s "$provider_temp_file" ]; then
|
||||||
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
ln -sf "$provider_temp_file" "$TMPDIR"/provider_temp_file
|
||||||
else
|
else
|
||||||
msg_alert "\033[33m正在获取在线模版......\033[0m"
|
msg_alert "\033[33m$PROVIDERS_FETCHING_TEMPLATE\033[0m"
|
||||||
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
|
get_bin "$TMPDIR"/provider_temp_file "rules/${CORE_TYPE}_providers/$provider_temp_file"
|
||||||
[ -z "$(grep -o 'route' "$TMPDIR"/provider_temp_file)" ] && {
|
[ -z "$(grep -o 'route' "$TMPDIR"/provider_temp_file)" ] && {
|
||||||
msg_alert "\033[31m下载失败,请尝试更换安装源!\033[0m"
|
msg_alert "\033[31m$PROVIDERS_DOWNLOAD_FAILED\033[0m"
|
||||||
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
. "$CRASHDIR"/menus/9_upgrade.sh && setserver
|
||||||
setproviders
|
setproviders
|
||||||
}
|
}
|
||||||
@@ -65,21 +67,21 @@ EOF
|
|||||||
# 调用内核测试
|
# 调用内核测试
|
||||||
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore merge "$TMPDIR"/config.json -C "$TMPDIR"/providers
|
. "$CRASHDIR"/starts/check_core.sh && check_core && "$TMPDIR"/CrashCore merge "$TMPDIR"/config.json -C "$TMPDIR"/providers
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
msg_alert "\033[32m配置文件生成成功!如果启动超时建议更新里手动安装Singbox-srs数据库常用包!\033[0m"
|
msg_alert "\033[32m$PROVIDERS_GEN_OK_SINGBOX\033[0m"
|
||||||
mkdir -p "$CRASHDIR"/jsons
|
mkdir -p "$CRASHDIR"/jsons
|
||||||
mv -f "$TMPDIR"/config.json "$CRASHDIR"/jsons/config.json
|
mv -f "$TMPDIR"/config.json "$CRASHDIR"/jsons/config.json
|
||||||
rm -rf "$TMPDIR"/providerss
|
rm -rf "$TMPDIR"/providerss
|
||||||
comp_box "是否立即启动/重启服务?"
|
comp_box "$PROVIDERS_RESTART_ASK"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $PROVIDERS_YES" \
|
||||||
"0) 否"
|
"0) $PROVIDERS_NO"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = 1 ] && {
|
[ "$res" = 1 ] && {
|
||||||
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset '更新订阅'
|
start_core && . "$CRASHDIR"/libs/set_cron.sh && cronset "$PROVIDERS_CRON_SUB_UPDATE"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
rm -rf "$TMPDIR"/CrashCore
|
rm -rf "$TMPDIR"/CrashCore
|
||||||
msg_alert "\033[31m生成配置文件出错,请仔细检查输入!\033[0m"
|
msg_alert "\033[31m$PROVIDERS_GEN_FAILED\033[0m"
|
||||||
# rm -rf "$TMPDIR"/providers
|
# rm -rf "$TMPDIR"/providers
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,19 +3,26 @@
|
|||||||
|
|
||||||
[ -f /tmp/SC_tmp/libs/check_dir_avail.sh ] && . /tmp/SC_tmp/libs/check_dir_avail.sh
|
[ -f /tmp/SC_tmp/libs/check_dir_avail.sh ] && . /tmp/SC_tmp/libs/check_dir_avail.sh
|
||||||
|
|
||||||
|
if [ -n "$CRASHDIR" ] && [ -s "$CRASHDIR/libs/i18n.sh" ]; then
|
||||||
|
. "$CRASHDIR/libs/i18n.sh"
|
||||||
|
load_lang set_crashdir
|
||||||
|
elif [ -n "$language" ] && [ -s "/tmp/SC_tmp/lang/$language/set_crashdir.lang" ]; then
|
||||||
|
. "/tmp/SC_tmp/lang/$language/set_crashdir.lang"
|
||||||
|
fi
|
||||||
|
|
||||||
set_usb_dir() {
|
set_usb_dir() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "请选择安装目录:"
|
comp_box "$SCD_SELECT_INSTALL_DIR"
|
||||||
du -hL /mnt |
|
du -hL /mnt |
|
||||||
awk '{print NR") "$2 " " $1}' |
|
awk '{print NR") "$2 " " $1}' |
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入相应数字> " num
|
read -r -p "$SCD_INPUT_NUM> " num
|
||||||
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
dir=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p)
|
||||||
if [ -z "$dir" ]; then
|
if [ -z "$dir" ]; then
|
||||||
msg_alert "\033[31m输入错误!请重新设置!\033[0m"
|
msg_alert "\033[31m$SCD_INPUT_ERROR\033[0m"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
break 1
|
break 1
|
||||||
@@ -23,15 +30,15 @@ set_usb_dir() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_xiaomi_dir() {
|
set_xiaomi_dir() {
|
||||||
comp_box "\033[33m检测到当前设备为小米官方系统,请选择安装位置:\033[0m"
|
comp_box "\033[33m$SCD_XIAOMI_DETECTED\033[0m"
|
||||||
[ -d /data ] && content_line "1) /data目录,剩余空间:$(dir_avail /data -h) (支持软固化功能)"
|
[ -d /data ] && content_line "1) /data$SCD_DIR_FREE$(dir_avail /data -h) $SCD_SOFT_SOLID"
|
||||||
[ -d /userdisk ] && content_line "2) /userdisk目录,剩余空间:$(dir_avail /userdisk -h) (支持软固化功能)"
|
[ -d /userdisk ] && content_line "2) /userdisk$SCD_DIR_FREE$(dir_avail /userdisk -h) $SCD_SOFT_SOLID"
|
||||||
[ -d /data/other_vol ] && content_line "3) /data/other_vol目录,剩余空间:$(dir_avail /data/other_vol -h) (支持软固化功能)"
|
[ -d /data/other_vol ] && content_line "3) /data/other_vol$SCD_DIR_FREE$(dir_avail /data/other_vol -h) $SCD_SOFT_SOLID"
|
||||||
content_line "4) 自定义目录(不推荐,不明勿用!)"
|
content_line "4) $SCD_CUSTOM_DIR_WARN"
|
||||||
content_line ""
|
content_line ""
|
||||||
content_line "0) 退出安装"
|
content_line "0) $SCD_EXIT_INSTALL"
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入相应数字> " num
|
read -r -p "$SCD_INPUT_NUM> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
1)
|
1)
|
||||||
dir=/data
|
dir=/data
|
||||||
@@ -54,17 +61,17 @@ set_xiaomi_dir() {
|
|||||||
|
|
||||||
set_asus_usb() {
|
set_asus_usb() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "请选择U盘目录:"
|
comp_box "$SCD_SELECT_USB_DIR"
|
||||||
du -hL /tmp/mnt |
|
du -hL /tmp/mnt |
|
||||||
awk -F/ 'NF<=4 {print NR") "$2 " " $1}' |
|
awk -F/ 'NF<=4 {print NR") "$2 " " $1}' |
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入相应数字> " num
|
read -r -p "$SCD_INPUT_NUM> " num
|
||||||
dir=$(du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print $2}' | sed -n "$num"p)
|
dir=$(du -hL /tmp/mnt | awk -F/ 'NF<=4' | awk '{print $2}' | sed -n "$num"p)
|
||||||
if [ ! -f "$dir/asusware.arm/etc/init.d/S50downloadmaster" ]; then
|
if [ ! -f "$dir/asusware.arm/etc/init.d/S50downloadmaster" ]; then
|
||||||
msg_alert "\033[31m未找到下载大师自启文件:$dir/asusware.arm/etc/init.d/S50downloadmaster,请检查设置!\033[0m"
|
msg_alert "\033[31m$SCD_ASUS_DM_NOT_FOUND $dir/asusware.arm/etc/init.d/S50downloadmaster,$SCD_CHECK_SETTING\033[0m"
|
||||||
else
|
else
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -73,19 +80,19 @@ set_asus_usb() {
|
|||||||
|
|
||||||
set_asus_dir() {
|
set_asus_dir() {
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "\033[33m检测到当前设备为华硕固件,请选择安装方式\033[0m" \
|
btm_box "\033[33m$SCD_ASUS_DETECTED\033[0m" \
|
||||||
"1) 基于U盘+下载大师安装(支持所有固件,限ARM设备,须插入U盘或移动硬盘)" \
|
"1) $SCD_ASUS_INSTALL_DM" \
|
||||||
"2) 基于自启脚本安装(仅持部分梅林固件)" \
|
"2) $SCD_ASUS_INSTALL_SCRIPT" \
|
||||||
"" \
|
"" \
|
||||||
"0) 退出安装"
|
"0) $SCD_EXIT_INSTALL"
|
||||||
read -r -p "请输入相应数字> " num
|
read -r -p "$SCD_INPUT_NUM> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
1)
|
1)
|
||||||
msg_alert -t 2 "请先在路由器网页后台安装下载大师并启用,之后选择外置存储所在目录!"
|
msg_alert -t 2 "$SCD_ASUS_DM_HINT"
|
||||||
set_asus_usb
|
set_asus_usb
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
msg_alert -t 2 "如开机无法正常自启,请重新使用U盘+下载大师安装!"
|
msg_alert -t 2 "$SCD_ASUS_REINSTALL_HINT"
|
||||||
dir=/jffs
|
dir=/jffs
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -97,9 +104,9 @@ set_asus_dir() {
|
|||||||
|
|
||||||
set_cust_dir() {
|
set_cust_dir() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "路径是必须带 / 的格式,注意写入虚拟内存(/tmp,/opt,/sys...)的文件会在重启后消失!" \
|
comp_box "$SCD_PATH_FORMAT_HINT" \
|
||||||
"" \
|
"" \
|
||||||
"可用路径 剩余空间:"
|
"$SCD_PATH_FREE_SPACE"
|
||||||
df -h |
|
df -h |
|
||||||
awk '{print $6, $4}' |
|
awk '{print $6, $4}' |
|
||||||
sed '1d' |
|
sed '1d' |
|
||||||
@@ -107,9 +114,9 @@ set_cust_dir() {
|
|||||||
content_line "$line"
|
content_line "$line"
|
||||||
done
|
done
|
||||||
separator_line "="
|
separator_line "="
|
||||||
read -r -p "请输入自定义路径> " dir
|
read -r -p "$SCD_INPUT_CUSTOM_DIR> " dir
|
||||||
if [ "$(dir_avail "$dir")" = 0 ] || [ -n "$(echo "$dir" | grep -Eq '^/(tmp|opt|sys)(/|$)')" ]; then
|
if [ "$(dir_avail "$dir")" = 0 ] || [ -n "$(echo "$dir" | grep -Eq '^/(tmp|opt|sys)(/|$)')" ]; then
|
||||||
msg_alert "\033[31m路径错误!请重新设置!\033[0m"
|
msg_alert "\033[31m$SCD_PATH_ERROR\033[0m"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
break 1
|
break 1
|
||||||
@@ -118,7 +125,7 @@ set_cust_dir() {
|
|||||||
|
|
||||||
set_crashdir() {
|
set_crashdir() {
|
||||||
while true; do
|
while true; do
|
||||||
top_box "\033[33m注意:安装ShellCrash至少需要预留约1MB的磁盘空间\033[0m"
|
top_box "\033[33m$SCD_INSTALL_SPACE_HINT\033[0m"
|
||||||
case "$systype" in
|
case "$systype" in
|
||||||
Padavan)
|
Padavan)
|
||||||
dir=/etc/storage
|
dir=/etc/storage
|
||||||
@@ -134,14 +141,14 @@ set_crashdir() {
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
separator_line "="
|
separator_line "="
|
||||||
btm_box "1) 在\033[32m/etc目录\033[0m下安装(适合root用户)" \
|
btm_box "1) $SCD_INSTALL_ETC" \
|
||||||
"2) 在\033[32m/usr/share目录\033[0m下安装(适合Linux系统)" \
|
"2) $SCD_INSTALL_USR" \
|
||||||
"3) 在\033[32m当前用户目录\033[0m下安装(适合非root用户)" \
|
"3) $SCD_INSTALL_HOME" \
|
||||||
"4) 在\033[32m外置存储\033[0m中安装" \
|
"4) $SCD_INSTALL_USB" \
|
||||||
"5) 手动设置安装目录" \
|
"5) $SCD_INSTALL_MANUAL" \
|
||||||
"" \
|
"" \
|
||||||
"0) 退出安装"
|
"0) $SCD_EXIT_INSTALL"
|
||||||
read -r -p "请输入相应数字> " num
|
read -r -p "$SCD_INPUT_NUM> " num
|
||||||
# 设置目录
|
# 设置目录
|
||||||
case "$num" in
|
case "$num" in
|
||||||
1)
|
1)
|
||||||
@@ -161,7 +168,7 @@ set_crashdir() {
|
|||||||
set_cust_dir
|
set_cust_dir
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
msg_alert "安装已取消"
|
msg_alert "$SCD_INSTALL_CANCELED"
|
||||||
line_break
|
line_break
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
@@ -170,14 +177,14 @@ set_crashdir() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
if [ ! -w "$dir" ]; then
|
if [ ! -w "$dir" ]; then
|
||||||
msg_alert "\033[31m没有$dir目录写入权限!请重新设置!\033[0m"
|
msg_alert "\033[31m$SCD_NO_WRITE_PREFIX$dir$SCD_NO_WRITE_SUFFIX\033[0m"
|
||||||
else
|
else
|
||||||
comp_box "目标目录\033[32m$dir\033[0m空间剩余:$(dir_avail "$dir" -h)" \
|
comp_box "$SCD_TARGET_DIR_PREFIX\033[32m$dir\033[0m$SCD_TARGET_DIR_SPACE$(dir_avail "$dir" -h)" \
|
||||||
"" \
|
"" \
|
||||||
"是否确认安装?"
|
"$SCD_CONFIRM_INSTALL"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $SCD_YES" \
|
||||||
"0) 否"
|
"0) $SCD_NO"
|
||||||
read -r -p "请输入相应数字> " res
|
read -r -p "$SCD_INPUT_NUM> " res
|
||||||
if [ "$res" = "1" ]; then
|
if [ "$res" = "1" ]; then
|
||||||
CRASHDIR="$dir"/ShellCrash
|
CRASHDIR="$dir"/ShellCrash
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -7,18 +7,20 @@ __IS_MODULE_SUBCONVERTER=1
|
|||||||
[ -z "$rule_link" ] && rule_link=1
|
[ -z "$rule_link" ] && rule_link=1
|
||||||
[ -z "$server_link" ] && server_link=1
|
[ -z "$server_link" ] && server_link=1
|
||||||
|
|
||||||
|
load_lang subconverter
|
||||||
|
|
||||||
# Subconverter在线订阅转换
|
# Subconverter在线订阅转换
|
||||||
subconverter() {
|
subconverter() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "1) \033[32m生成\033[0m包含全部节点、订阅的配置文件"\
|
comp_box "1) \033[32m$SUBCONVERTER_MENU_GEN\033[0m"\
|
||||||
"2) 设置\033[31m排除节点正则\033[0m \033[47;30m$exclude\033[0m"\
|
"2) $SUBCONVERTER_MENU_EXCLUDE \033[47;30m$exclude\033[0m"\
|
||||||
"3) 设置\033[32m包含节点正则\033[0m \033[47;30m$include\033[0m"\
|
"3) $SUBCONVERTER_MENU_INCLUDE \033[47;30m$include\033[0m"\
|
||||||
"4) 选择\033[33m在线规则模版\033[0m"\
|
"4) $SUBCONVERTER_MENU_RULE"\
|
||||||
"5) 选择\033[0mSubconverter服务器\033[0m"\
|
"5) $SUBCONVERTER_MENU_SERVER"\
|
||||||
"6) 自定义浏览器UA \033[32m$user_agent\033[0m"\
|
"6) $SUBCONVERTER_MENU_UA \033[32m$user_agent\033[0m"\
|
||||||
""\
|
""\
|
||||||
"0) $COMMON_BACK"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
"" | 0)
|
"" | 0)
|
||||||
break
|
break
|
||||||
@@ -57,13 +59,13 @@ subconverter() {
|
|||||||
|
|
||||||
# 排除节点正则
|
# 排除节点正则
|
||||||
gen_link_flt() {
|
gen_link_flt() {
|
||||||
comp_box "\033[33m匹配关键字的节点会在导入时被【屏蔽】!\033[0m" \
|
comp_box "\033[33m$SUBCONVERTER_EXCLUDE_HINT1\033[0m" \
|
||||||
"多个关键字可以用\033[30;47m | \033[0m号分隔" \
|
"$SUBCONVERTER_KEYWORD_SPLIT" \
|
||||||
"\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代"
|
"$SUBCONVERTER_REGEX_HINT"
|
||||||
btm_box "\033[36m请直接输入节点过滤关键字\033[0m" \
|
btm_box "\033[36m$SUBCONVERTER_EXCLUDE_INPUT\033[0m" \
|
||||||
"或输入 d \033[31m清空\033[0m节点过滤关键字" \
|
"$SUBCONVERTER_EXCLUDE_CLEAR" \
|
||||||
"或输入 0 返回上级菜单"
|
"$SUBCONVERTER_BACK"
|
||||||
read -r -p "请输入> " res
|
read -r -p "$SUBCONVERTER_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
0)
|
0)
|
||||||
return 0
|
return 0
|
||||||
@@ -85,13 +87,13 @@ gen_link_flt() {
|
|||||||
|
|
||||||
# 包含节点正则
|
# 包含节点正则
|
||||||
gen_link_ele() {
|
gen_link_ele() {
|
||||||
comp_box "\033[33m仅有匹配关键字的节点才会被【导入】!!!\033[0m" \
|
comp_box "\033[33m$SUBCONVERTER_INCLUDE_HINT1\033[0m" \
|
||||||
"多个关键字可以用\033[30;47m | \033[0m号分隔" \
|
"$SUBCONVERTER_KEYWORD_SPLIT" \
|
||||||
"\033[32m支持正则表达式\033[0m,空格请使用\033[30;47m + \033[0m号替代"
|
"$SUBCONVERTER_REGEX_HINT"
|
||||||
btm_box "\033[36m请直接输入节点匹配关键字\033[0m" \
|
btm_box "\033[36m$SUBCONVERTER_INCLUDE_INPUT\033[0m" \
|
||||||
"或输入 d \033[31m清空\033[0m节点匹配关键字" \
|
"$SUBCONVERTER_INCLUDE_CLEAR" \
|
||||||
"或输入 0 返回上级菜单"
|
"$SUBCONVERTER_BACK"
|
||||||
read -r -p "请输入> " res
|
read -r -p "$SUBCONVERTER_INPUT> " res
|
||||||
case "$res" in
|
case "$res" in
|
||||||
0)
|
0)
|
||||||
return 0
|
return 0
|
||||||
@@ -115,11 +117,11 @@ gen_link_ele() {
|
|||||||
gen_link_config() {
|
gen_link_config() {
|
||||||
list=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | awk '{print $2$4}')
|
list=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | awk '{print $2$4}')
|
||||||
now=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $2}')
|
now=$(grep -aE '^5' "$CRASHDIR"/configs/servers.list | sed -n ""$rule_link"p" | awk '{print $2}')
|
||||||
comp_box "当前使用规则为:\033[33m$now\033[0m"
|
comp_box "$SUBCONVERTER_RULE_CURRENT\033[33m$now\033[0m"
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
content_line ""
|
content_line ""
|
||||||
common_back
|
common_back
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list)
|
totalnum=$(grep -acE '^5' "$CRASHDIR"/configs/servers.list)
|
||||||
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then
|
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then
|
||||||
errornum
|
errornum
|
||||||
@@ -129,7 +131,7 @@ gen_link_config() {
|
|||||||
# 将对应标记值写入配置
|
# 将对应标记值写入配置
|
||||||
rule_link=$num
|
rule_link=$num
|
||||||
if setconfig rule_link "$rule_link"; then
|
if setconfig rule_link "$rule_link"; then
|
||||||
msg_alert "\033[32m设置成功!返回上级菜单\033[0m"
|
msg_alert "\033[32m$SUBCONVERTER_SET_OK\033[0m"
|
||||||
else
|
else
|
||||||
common_failed
|
common_failed
|
||||||
fi
|
fi
|
||||||
@@ -141,14 +143,14 @@ gen_link_server() {
|
|||||||
list=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | awk '{print $3" "$2}')
|
list=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | awk '{print $3" "$2}')
|
||||||
now=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}')
|
now=$(grep -aE '^3|^4' "$CRASHDIR"/configs/servers.list | sed -n ""$server_link"p" | awk '{print $3}')
|
||||||
|
|
||||||
comp_box "\033[36m以下为互联网采集的第三方服务器,具体安全性请自行斟酌!\033[0m" \
|
comp_box "\033[36m$SUBCONVERTER_SERVER_HINT\033[0m" \
|
||||||
"\033[32m感谢以下作者的无私奉献!!!\033[0m" \
|
"\033[32m$SUBCONVERTER_SERVER_THANKS\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"当前使用后端为:\033[33m$now\033[0m"
|
"$SUBCONVERTER_SERVER_CURRENT\033[33m$now\033[0m"
|
||||||
list_box "$list"
|
list_box "$list"
|
||||||
content_line ""
|
content_line ""
|
||||||
common_back
|
common_back
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list)
|
totalnum=$(grep -acE '^3|^4' "$CRASHDIR"/configs/servers.list)
|
||||||
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then
|
if [ -z "$num" ] || [ "$num" -gt "$totalnum" ]; then
|
||||||
errornum
|
errornum
|
||||||
@@ -158,7 +160,7 @@ gen_link_server() {
|
|||||||
# 将对应标记值写入配置
|
# 将对应标记值写入配置
|
||||||
server_link=$num
|
server_link=$num
|
||||||
if setconfig server_link "$server_link"; then
|
if setconfig server_link "$server_link"; then
|
||||||
content_line "\033[32m设置成功!返回上级菜单\033[0m"
|
content_line "\033[32m$SUBCONVERTER_SET_OK\033[0m"
|
||||||
else
|
else
|
||||||
common_failed
|
common_failed
|
||||||
fi
|
fi
|
||||||
@@ -167,16 +169,16 @@ gen_link_server() {
|
|||||||
|
|
||||||
set_sub_ua() {
|
set_sub_ua() {
|
||||||
while true; do
|
while true; do
|
||||||
comp_box "\033[36m无法正确获取配置文件时可尝试使用\033[0m" \
|
comp_box "\033[36m$SUBCONVERTER_UA_HINT\033[0m" \
|
||||||
"" \
|
"" \
|
||||||
"当前UA:$user_agent"
|
"$SUBCONVERTER_UA_CURRENT$user_agent"
|
||||||
btm_box "1) 使用自动UA(默认)"\
|
btm_box "1) $SUBCONVERTER_UA_AUTO"\
|
||||||
"2) 不使用UA"\
|
"2) $SUBCONVERTER_UA_NONE"\
|
||||||
"3) 使用自定义UA"\
|
"3) $SUBCONVERTER_UA_CUSTOM"\
|
||||||
"4) 清空UA"\
|
"4) $SUBCONVERTER_UA_CLEAR"\
|
||||||
""\
|
""\
|
||||||
"0) 返回上级菜单"
|
"0) $COMMON_BACK"
|
||||||
read -r -p "请输入对应数字> " num
|
read -r -p "$COMMON_INPUT> " num
|
||||||
case "$num" in
|
case "$num" in
|
||||||
0)
|
0)
|
||||||
break
|
break
|
||||||
@@ -188,10 +190,10 @@ set_sub_ua() {
|
|||||||
user_agent='none'
|
user_agent='none'
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
comp_box "\033[33m注意:\n自定义UA不可包含空格或特殊符号!\033[0m"
|
comp_box "\033[33m$SUBCONVERTER_UA_CUSTOM_WARN\033[0m"
|
||||||
btm_box "\033[36m请直接输入自定义UA\033[0m" \
|
btm_box "\033[36m$SUBCONVERTER_UA_CUSTOM_INPUT\033[0m" \
|
||||||
"或输入 0 返回上级菜单"
|
"$SUBCONVERTER_BACK"
|
||||||
read -r -p "请输入> " text
|
read -r -p "$SUBCONVERTER_INPUT> " text
|
||||||
if [ "$text" = 0 ]; then
|
if [ "$text" = 0 ]; then
|
||||||
continue
|
continue
|
||||||
elif [ -n "$text" ]; then
|
elif [ -n "$text" ]; then
|
||||||
|
|||||||
@@ -9,12 +9,15 @@
|
|||||||
. "$CRASHDIR"/libs/set_config.sh
|
. "$CRASHDIR"/libs/set_config.sh
|
||||||
. "$CRASHDIR"/libs/web_get_bin.sh
|
. "$CRASHDIR"/libs/web_get_bin.sh
|
||||||
. "$CRASHDIR"/libs/logger.sh
|
. "$CRASHDIR"/libs/logger.sh
|
||||||
|
. "$CRASHDIR"/libs/i18n.sh
|
||||||
|
|
||||||
|
load_lang task_cmd
|
||||||
|
|
||||||
task_logger(){
|
task_logger(){
|
||||||
[ "$task_push" = 1 ] && push= || push=off
|
[ "$task_push" = 1 ] && push= || push=off
|
||||||
[ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m"
|
[ -n "$2" -a "$2" != 0 ] && echo -e "\033[$2m$1\033[0m"
|
||||||
[ "$3" = 'off' ] && push=off
|
[ "$3" = 'off' ] && push=off
|
||||||
echo "$1" |grep -qE '(每隔|时每)([1-9]|[1-9][0-9])分钟' && {
|
echo "$1" |grep -qE "($TASK_CMD_EVERY|$TASK_CMD_HOURLY)([1-9]|[1-9][0-9])$TASK_CMD_MIN" && {
|
||||||
push=off
|
push=off
|
||||||
cover=on
|
cover=on
|
||||||
}
|
}
|
||||||
@@ -32,22 +35,22 @@ update_core(){ #自动更新内核
|
|||||||
check_update bin/version
|
check_update bin/version
|
||||||
crash_v_new=$(eval echo \$${crashcore}_v)
|
crash_v_new=$(eval echo \$${crashcore}_v)
|
||||||
if [ -z "$crash_v_new" -o "$crash_v_new" = "$core_v" ];then
|
if [ -z "$crash_v_new" -o "$crash_v_new" = "$core_v" ];then
|
||||||
task_logger "任务【自动更新内核】中止-未检测到版本更新"
|
task_logger "$TASK_CMD_CORE_SKIP"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
. "$CRASHDIR"/libs/core_tools.sh && core_webget #调用下载工具
|
. "$CRASHDIR"/libs/core_tools.sh && core_webget #调用下载工具
|
||||||
case "$?" in
|
case "$?" in
|
||||||
0)
|
0)
|
||||||
task_logger "任务【自动更新内核】下载完成,正在重启服务!"
|
task_logger "$TASK_CMD_CORE_DONE"
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
task_logger "任务【自动更新内核】出错-下载失败!"
|
task_logger "$TASK_CMD_CORE_DL_FAIL"
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
task_logger "任务【自动更新内核】出错-内核校验失败!"
|
task_logger "$TASK_CMD_CORE_VERIFY_FAIL"
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
@@ -58,13 +61,13 @@ update_scripts(){ #自动更新脚本
|
|||||||
#检查版本
|
#检查版本
|
||||||
check_update version
|
check_update version
|
||||||
if [ -z "$versionsh" -o "$versionsh" = "versionsh_l" ];then
|
if [ -z "$versionsh" -o "$versionsh" = "versionsh_l" ];then
|
||||||
task_logger "任务【自动更新脚本】中止-未检测到版本更新"
|
task_logger "$TASK_CMD_SCRIPT_SKIP"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
get_bin "$TMPDIR"/ShellCrash.tar.gz "ShellCrash.tar.gz"
|
get_bin "$TMPDIR"/ShellCrash.tar.gz "ShellCrash.tar.gz"
|
||||||
if [ "$?" != "0" ];then
|
if [ "$?" != "0" ];then
|
||||||
rm -rf "$TMPDIR"/ShellCrash.tar.gz
|
rm -rf "$TMPDIR"/ShellCrash.tar.gz
|
||||||
task_logger "任务【自动更新内核】出错-下载失败!"
|
task_logger "$TASK_CMD_CORE_DL_FAIL"
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
#停止服务
|
#停止服务
|
||||||
@@ -73,7 +76,7 @@ update_scripts(){ #自动更新脚本
|
|||||||
tar -zxf "$TMPDIR"/ShellCrash.tar.gz ${tar_para} -C "$CRASHDIR"/
|
tar -zxf "$TMPDIR"/ShellCrash.tar.gz ${tar_para} -C "$CRASHDIR"/
|
||||||
if [ $? -ne 0 ];then
|
if [ $? -ne 0 ];then
|
||||||
rm -rf "$TMPDIR"/ShellCrash.tar.gz
|
rm -rf "$TMPDIR"/ShellCrash.tar.gz
|
||||||
task_logger "任务【自动更新内核】出错-解压失败!"
|
task_logger "$TASK_CMD_SCRIPT_UNZIP_FAIL"
|
||||||
"$CRASHDIR"/start.sh start
|
"$CRASHDIR"/start.sh start
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
@@ -92,17 +95,17 @@ update_mmdb(){ #自动更新数据库
|
|||||||
geo_v_new=$GeoIP_v
|
geo_v_new=$GeoIP_v
|
||||||
geo_v_now=$(eval echo \$$geo_v)
|
geo_v_now=$(eval echo \$$geo_v)
|
||||||
if [ -z "$geo_v_new" -o "$geo_v_new" = "$geo_v_now" ];then
|
if [ -z "$geo_v_new" -o "$geo_v_new" = "$geo_v_now" ];then
|
||||||
task_logger "任务【自动更新数据库文件】跳过-未检测到$2版本更新"
|
task_logger "$TASK_CMD_DB_SKIP_PREFIX$2$TASK_CMD_DB_SKIP_SUFFIX"
|
||||||
else
|
else
|
||||||
#更新文件
|
#更新文件
|
||||||
get_bin "$TMPDIR"/$1 "bin/geodata/$2"
|
get_bin "$TMPDIR"/$1 "bin/geodata/$2"
|
||||||
if [ "$?" != "0" ];then
|
if [ "$?" != "0" ];then
|
||||||
task_logger "任务【自动更新数据库文件】更新【$2】下载失败!"
|
task_logger "$TASK_CMD_DB_DL_FAIL_PREFIX$2$TASK_CMD_DB_DL_FAIL_SUFFIX"
|
||||||
rm -rf "$TMPDIR"/$1
|
rm -rf "$TMPDIR"/$1
|
||||||
else
|
else
|
||||||
mv -f "$TMPDIR"/$1 "$BINDIR"/$1
|
mv -f "$TMPDIR"/$1 "$BINDIR"/$1
|
||||||
setconfig $geo_v $GeoIP_v
|
setconfig $geo_v $GeoIP_v
|
||||||
task_logger "任务【自动更新数据库文件】更新【$2】成功!"
|
task_logger "$TASK_CMD_DB_OK_PREFIX$2$TASK_CMD_DB_OK_SUFFIX"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -140,8 +143,8 @@ case "$1" in
|
|||||||
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}')
|
task_command=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $2}')
|
||||||
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}')
|
task_name=$(cat "$CRASHDIR"/task/task.list "$CRASHDIR"/task/task.user 2>/dev/null | grep "$1" | awk -F '#' '{print $3}')
|
||||||
#task_logger "任务$task_name 开始执行"
|
#task_logger "任务$task_name 开始执行"
|
||||||
eval $task_command && task_res=成功 || task_res=失败
|
eval $task_command && task_res="$TASK_CMD_RES_OK" || task_res="$TASK_CMD_RES_FAIL"
|
||||||
task_logger "任务【$2】执行$task_res"
|
task_logger "$TASK_CMD_EXEC_PREFIX$2$TASK_CMD_EXEC_MID$task_res"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
"$1"
|
"$1"
|
||||||
|
|||||||
@@ -1,26 +1,28 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) Juewuy
|
# Copyright (C) Juewuy
|
||||||
|
|
||||||
|
load_lang uninstall
|
||||||
|
|
||||||
# 卸载
|
# 卸载
|
||||||
uninstall() {
|
uninstall() {
|
||||||
comp_box "\033[31m警告:该操作不可逆!\033[0m" \
|
comp_box "\033[31m$UNINSTALL_WARN\033[0m" \
|
||||||
"是否确认卸载ShellCrash?"
|
"$UNINSTALL_CONFIRM"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $UNINSTALL_YES" \
|
||||||
"0) 否"
|
"0) $UNINSTALL_NO"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = '1' ]; then
|
if [ "$res" = '1' ]; then
|
||||||
# 停止服务
|
# 停止服务
|
||||||
"$CRASHDIR"/start.sh stop 2>/dev/null
|
"$CRASHDIR"/start.sh stop 2>/dev/null
|
||||||
"$CRASHDIR"/start.sh cronset "clash服务" 2>/dev/null
|
"$CRASHDIR"/start.sh cronset "$UNINSTALL_CRON_CLASH" 2>/dev/null
|
||||||
"$CRASHDIR"/start.sh cronset "订阅链接" 2>/dev/null
|
"$CRASHDIR"/start.sh cronset "$UNINSTALL_CRON_SUB" 2>/dev/null
|
||||||
"$CRASHDIR"/start.sh cronset "ShellCrash初始化" 2>/dev/null
|
"$CRASHDIR"/start.sh cronset "$UNINSTALL_CRON_INIT" 2>/dev/null
|
||||||
"$CRASHDIR"/start.sh cronset "task.sh" 2>/dev/null
|
"$CRASHDIR"/start.sh cronset "task.sh" 2>/dev/null
|
||||||
|
|
||||||
# 移除安装目录
|
# 移除安装目录
|
||||||
if [ -n "$CRASHDIR" ] && [ "$CRASHDIR" != '/' ]; then
|
if [ -n "$CRASHDIR" ] && [ "$CRASHDIR" != '/' ]; then
|
||||||
comp_box "是否保留脚本配置及订阅文件?"
|
comp_box "$UNINSTALL_KEEP_CONFIRM"
|
||||||
btm_box "1) 是" \
|
btm_box "1) $UNINSTALL_YES" \
|
||||||
"0) 否"
|
"0) $UNINSTALL_NO"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
if [ "$res" = '1' ]; then
|
if [ "$res" = '1' ]; then
|
||||||
mv -f "$CRASHDIR"/configs /tmp/ShellCrash/configs_bak
|
mv -f "$CRASHDIR"/configs /tmp/ShellCrash/configs_bak
|
||||||
@@ -34,7 +36,7 @@ uninstall() {
|
|||||||
rm -rf "$CRASHDIR"
|
rm -rf "$CRASHDIR"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m环境变量配置有误,请尝试手动移除安装目录!\033[0m"
|
msg_alert "\033[31m$UNINSTALL_ENV_ERROR\033[0m"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 移除其他内容
|
# 移除其他内容
|
||||||
@@ -48,9 +50,9 @@ uninstall() {
|
|||||||
}
|
}
|
||||||
sed -i '/all_proxy/'d /etc/profile 2>/dev/null
|
sed -i '/all_proxy/'d /etc/profile 2>/dev/null
|
||||||
sed -i '/ALL_PROXY/'d /etc/profile 2>/dev/null
|
sed -i '/ALL_PROXY/'d /etc/profile 2>/dev/null
|
||||||
sed -i "/启用外网访问SSH服务/d" /etc/firewall.user 2>/dev/null
|
sed -i "/$UNINSTALL_SSH_MARK/d" /etc/firewall.user 2>/dev/null
|
||||||
sed -i '/ShellCrash初始化/'d /etc/storage/started_script.sh 2>/dev/null
|
sed -i "/$UNINSTALL_CRON_INIT/d" /etc/storage/started_script.sh 2>/dev/null
|
||||||
sed -i '/ShellCrash初始化/'d /jffs/.asusrouter 2>/dev/null
|
sed -i "/$UNINSTALL_CRON_INIT/d" /jffs/.asusrouter 2>/dev/null
|
||||||
[ "$BINDIR" != "$CRASHDIR" ] && rm -rf "$BINDIR"
|
[ "$BINDIR" != "$CRASHDIR" ] && rm -rf "$BINDIR"
|
||||||
rm -rf /etc/init.d/shellcrash
|
rm -rf /etc/init.d/shellcrash
|
||||||
rm -rf /etc/systemd/system/shellcrash.service
|
rm -rf /etc/systemd/system/shellcrash.service
|
||||||
@@ -62,12 +64,12 @@ uninstall() {
|
|||||||
userdel -r shellcrash 2>/dev/null
|
userdel -r shellcrash 2>/dev/null
|
||||||
nvram set script_usbmount="" 2>/dev/null
|
nvram set script_usbmount="" 2>/dev/null
|
||||||
nvram commit 2>/dev/null
|
nvram commit 2>/dev/null
|
||||||
comp_box "\033[36m已卸载ShellCrash相关文件!有缘再会!\033[0m" \
|
comp_box "\033[36m$UNINSTALL_DONE\033[0m" \
|
||||||
"\033[33m请手动关闭当前窗口以重置环境变量!\033[0m"
|
"\033[33m$UNINSTALL_CLOSE_HINT\033[0m"
|
||||||
line_break
|
line_break
|
||||||
sleep 1
|
sleep 1
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
msg_alert "\033[31m操作已取消!\033[0m"
|
msg_alert "\033[31m$UNINSTALL_CANCELED\033[0m"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,8 +111,8 @@ userguide() {
|
|||||||
comp_box "\033[0m$UG_IMPORT_CONFIG\033[0m" \
|
comp_box "\033[0m$UG_IMPORT_CONFIG\033[0m" \
|
||||||
"\033[32m$UG_CONFIG_TIP\033[0m" \
|
"\033[32m$UG_CONFIG_TIP\033[0m" \
|
||||||
"$UG_CONFIG_RES"
|
"$UG_CONFIG_RES"
|
||||||
btm_box "1) 立即导入" \
|
btm_box "1) $UG_IMPORT_NOW" \
|
||||||
"0) 暂不导入"
|
"0) $UG_IMPORT_LATER"
|
||||||
read -r -p "$COMMON_INPUT> " res
|
read -r -p "$COMMON_INPUT> " res
|
||||||
[ "$res" = 1 ] && inuserguide=1 && {
|
[ "$res" = 1 ] && inuserguide=1 && {
|
||||||
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config
|
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config
|
||||||
|
|||||||
Reference in New Issue
Block a user