~优化文件结构,准备将bin文件放到单独分支

This commit is contained in:
juewuy
2025-12-09 18:48:22 +08:00
parent 82e2da631f
commit 8c9752faa4
6 changed files with 42 additions and 37 deletions

View File

@@ -249,7 +249,7 @@ if [ -n "$profile" ]; then
echo "alias crash=\"$shtype $CRASHDIR/menu.sh\"" >>$profile #设置快捷命令环境变量 echo "alias crash=\"$shtype $CRASHDIR/menu.sh\"" >>$profile #设置快捷命令环境变量
sed -i '/export CRASHDIR=*/'d $profile sed -i '/export CRASHDIR=*/'d $profile
echo "export CRASHDIR=\"$CRASHDIR\"" >>$profile #设置路径环境变量 echo "export CRASHDIR=\"$CRASHDIR\"" >>$profile #设置路径环境变量
source $profile >/dev/null 2>&1 || echo 运行错误请使用bash而不是dash运行安装命令 . $profile >/dev/null 2>&1 || echo 运行错误请使用bash而不是dash运行安装命令
#适配zsh环境变量 #适配zsh环境变量
zsh --version >/dev/null 2>&1 && [ -z "$(cat ~/.zshrc 2>/dev/null | grep CRASHDIR)" ] && { zsh --version >/dev/null 2>&1 && [ -z "$(cat ~/.zshrc 2>/dev/null | grep CRASHDIR)" ] && {
sed -i '/alias crash=*/'d ~/.zshrc 2>/dev/null sed -i '/alias crash=*/'d ~/.zshrc 2>/dev/null

View File

@@ -9,8 +9,8 @@ CFG_PATH=${CRASHDIR}/configs/ShellCrash.cfg
YAMLSDIR=${CRASHDIR}/yamls YAMLSDIR=${CRASHDIR}/yamls
JSONSDIR=${CRASHDIR}/jsons JSONSDIR=${CRASHDIR}/jsons
#加载执行目录,失败则初始化 #加载执行目录,失败则初始化
source ${CRASHDIR}/configs/command.env 2>/dev/null . ${CRASHDIR}/configs/command.env 2>/dev/null
[ -z "$BINDIR" -o -z "$TMPDIR" -o -z "$COMMAND" ] && source ${CRASHDIR}/init.sh >/dev/null 2>&1 [ -z "$BINDIR" -o -z "$TMPDIR" -o -z "$COMMAND" ] && . ${CRASHDIR}/init.sh >/dev/null 2>&1
[ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR} [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR}
[ -n "$(tar --help 2>&1 | grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容 [ -n "$(tar --help 2>&1 | grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容
@@ -29,9 +29,9 @@ ckstatus() {
#检查/读取脚本配置文件 #检查/读取脚本配置文件
if [ -f $CFG_PATH ]; then if [ -f $CFG_PATH ]; then
[ -n "$(awk 'a[$0]++' $CFG_PATH)" ] && awk '!a[$0]++' $CFG_PATH >$CFG_PATH #检查重复行并去除 [ -n "$(awk 'a[$0]++' $CFG_PATH)" ] && awk '!a[$0]++' $CFG_PATH >$CFG_PATH #检查重复行并去除
source $CFG_PATH 2>/dev/null . $CFG_PATH 2>/dev/null
else else
source ${CRASHDIR}/init.sh >/dev/null 2>&1 . ${CRASHDIR}/init.sh >/dev/null 2>&1
fi fi
versionsh=$(cat ${CRASHDIR}/init.sh | grep -E ^version= | head -n 1 | sed 's/version=//') versionsh=$(cat ${CRASHDIR}/init.sh | grep -E ^version= | head -n 1 | sed 's/version=//')
[ -n "$versionsh" ] && versionsh_l=$versionsh [ -n "$versionsh" ] && versionsh_l=$versionsh
@@ -112,7 +112,7 @@ ckstatus() {
#检查新手引导 #检查新手引导
if [ -z "$userguide" ]; then if [ -z "$userguide" ]; then
setconfig userguide 1 setconfig userguide 1
source ${CRASHDIR}/webget.sh && userguide . ${CRASHDIR}/webget.sh && userguide
fi fi
#检查执行权限 #检查执行权限
[ ! -x ${CRASHDIR}/start.sh ] && chmod +x ${CRASHDIR}/start.sh [ ! -x ${CRASHDIR}/start.sh ] && chmod +x ${CRASHDIR}/start.sh
@@ -126,7 +126,7 @@ ckstatus() {
core_v=$(/tmp/$file -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //') core_v=$(/tmp/$file -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //')
[ -z "$core_v" ] && core_v=$(/tmp/$file version 2>/dev/null | grep -Eo 'version .*' | sed 's/version //') [ -z "$core_v" ] && core_v=$(/tmp/$file version 2>/dev/null | grep -Eo 'version .*' | sed 's/version //')
if [ -n "$core_v" ]; then if [ -n "$core_v" ]; then
source ${CRASHDIR}/webget.sh && setcoretype && . ${CRASHDIR}/webget.sh && setcoretype &&
mv -f /tmp/$file ${TMPDIR}/CrashCore && mv -f /tmp/$file ${TMPDIR}/CrashCore &&
tar -zcf ${BINDIR}/CrashCore.tar.gz ${tar_para} -C ${TMPDIR} CrashCore && tar -zcf ${BINDIR}/CrashCore.tar.gz ${tar_para} -C ${TMPDIR} CrashCore &&
echo -e "\033[32m内核加载完成\033[0m " && echo -e "\033[32m内核加载完成\033[0m " &&
@@ -193,7 +193,7 @@ start_core() {
echo -e "\033[33m没有找到${crashcore}配置文件尝试生成providers配置文件\033[0m" echo -e "\033[33m没有找到${crashcore}配置文件尝试生成providers配置文件\033[0m"
[ "$crashcore" = singboxr ] && coretype=singbox [ "$crashcore" = singboxr ] && coretype=singbox
[ "$crashcore" = meta -o "$crashcore" = clashpre ] && coretype=clash [ "$crashcore" = meta -o "$crashcore" = clashpre ] && coretype=clash
source ${CRASHDIR}/webget.sh && gen_${coretype}_providers . ${CRASHDIR}/webget.sh && gen_${coretype}_providers
elif [ -s $core_config -o -n "$Url" -o -n "$Https" ]; then elif [ -s $core_config -o -n "$Url" -o -n "$Https" ]; then
${CRASHDIR}/start.sh start ${CRASHDIR}/start.sh start
#设置循环检测以判定服务启动是否成功 #设置循环检测以判定服务启动是否成功
@@ -210,7 +210,7 @@ start_core() {
[ -n "$test" -o -n "$(pidof CrashCore)" ] && startover [ -n "$test" -o -n "$(pidof CrashCore)" ] && startover
else else
echo -e "\033[31m没有找到${crashcore}配置文件,请先导入配置文件!\033[0m" echo -e "\033[31m没有找到${crashcore}配置文件,请先导入配置文件!\033[0m"
source ${CRASHDIR}/webget.sh && set_core_config . ${CRASHDIR}/webget.sh && set_core_config
fi fi
} }
start_service() { start_service() {
@@ -546,7 +546,7 @@ log_pusher() { #日志菜单
esac esac
} }
setport() { #端口设置 setport() { #端口设置
source $CFG_PATH >/dev/null . $CFG_PATH >/dev/null
[ -z "$secret" ] && secret=未设置 [ -z "$secret" ] && secret=未设置
[ -z "$table" ] && table=100 [ -z "$table" ] && table=100
[ -z "$authentication" ] && auth=未设置 || auth=****** [ -z "$authentication" ] && auth=未设置 || auth=******
@@ -968,7 +968,7 @@ checkport() { #自动检查端口冲突
echo -e "\033[0m-----------------------------------------------" echo -e "\033[0m-----------------------------------------------"
echo -e "\033[36m请修改默认端口配置\033[0m" echo -e "\033[36m请修改默认端口配置\033[0m"
setport setport
source $CFG_PATH >/dev/null . $CFG_PATH >/dev/null
checkport checkport
fi fi
done done
@@ -1883,7 +1883,7 @@ advanced_set() { #进阶设置
fi fi
elif [ "$num" = 3 ]; then elif [ "$num" = 3 ]; then
mv -f $CFG_PATH $CFG_PATH.bak mv -f $CFG_PATH $CFG_PATH.bak
source ${CRASHDIR}/init.sh >/dev/null . ${CRASHDIR}/init.sh >/dev/null
echo -e "\033[32m脚本设置已重置(旧文件已备份!)\033[0m" echo -e "\033[32m脚本设置已重置(旧文件已备份!)\033[0m"
fi fi
echo -e "\033[33m请重新启动脚本\033[0m" echo -e "\033[33m请重新启动脚本\033[0m"
@@ -2068,10 +2068,10 @@ tools() {
i= i=
elif [ "$num" = 1 ]; then elif [ "$num" = 1 ]; then
source ${CRASHDIR}/webget.sh && testcommand . ${CRASHDIR}/webget.sh && testcommand
elif [ "$num" = 2 ]; then elif [ "$num" = 2 ]; then
source ${CRASHDIR}/webget.sh && userguide . ${CRASHDIR}/webget.sh && userguide
elif [ "$num" = 3 ]; then elif [ "$num" = 3 ]; then
log_pusher log_pusher
@@ -2203,11 +2203,11 @@ main_menu() {
main_menu main_menu
elif [ "$num" = 5 ]; then elif [ "$num" = 5 ]; then
source ${CRASHDIR}/task/task.sh && task_menu . ${CRASHDIR}/task/task.sh && task_menu
main_menu main_menu
elif [ "$num" = 6 ]; then elif [ "$num" = 6 ]; then
source ${CRASHDIR}/webget.sh && set_core_config . ${CRASHDIR}/webget.sh && set_core_config
main_menu main_menu
elif [ "$num" = 7 ]; then elif [ "$num" = 7 ]; then
@@ -2225,7 +2225,7 @@ main_menu() {
elif [ "$num" = 9 ]; then elif [ "$num" = 9 ]; then
checkcfg=$(cat $CFG_PATH) checkcfg=$(cat $CFG_PATH)
source ${CRASHDIR}/webget.sh && update . ${CRASHDIR}/webget.sh && update
if [ -n "$PID" ]; then if [ -n "$PID" ]; then
checkcfg_new=$(cat $CFG_PATH) checkcfg_new=$(cat $CFG_PATH)
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart [ "$checkcfg" != "$checkcfg_new" ] && checkrestart
@@ -2244,7 +2244,7 @@ main_menu() {
cd $(dirname $0) cd $(dirname $0)
pwd pwd
) )
source ${CRASHDIR}/init.sh . ${CRASHDIR}/init.sh
sleep 1 sleep 1
echo 请重启SSH窗口以完成初始化 echo 请重启SSH窗口以完成初始化
exit exit
@@ -2280,7 +2280,7 @@ case "$1" in
${CRASHDIR}/start.sh $2 $3 $4 $5 $6 ${CRASHDIR}/start.sh $2 $3 $4 $5 $6
;; ;;
-i) -i)
source ${CRASHDIR}/init.sh . ${CRASHDIR}/init.sh
;; ;;
-st) -st)
shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash

View File

@@ -210,6 +210,7 @@ get_bin() { #专用于项目内部文件的下载
. "$CRASHDIR"/configs/ShellCrash.cfg >/dev/null . "$CRASHDIR"/configs/ShellCrash.cfg >/dev/null
[ -z "$update_url" ] && update_url=https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master [ -z "$update_url" ] && update_url=https://testingcf.jsdelivr.net/gh/juewuy/ShellCrash@master
if [ -n "$url_id" ]; then if [ -n "$url_id" ]; then
echo "$2" | grep -q '^/bin' && release_type=update #/bin文件改为在update分支下载
[ -z "$release_type" ] && release_type=master [ -z "$release_type" ] && release_type=master
if [ "$url_id" = 101 -o "$url_id" = 104 ]; then if [ "$url_id" = 101 -o "$url_id" = 104 ]; then
url="$(grep "$url_id" "$CRASHDIR"/configs/servers.list | awk '{print $3}')@$release_type/$2" #jsdelivr特殊处理 url="$(grep "$url_id" "$CRASHDIR"/configs/servers.list | awk '{print $3}')@$release_type/$2" #jsdelivr特殊处理
@@ -1032,7 +1033,7 @@ start_ipt_route() { #iptables-route通用工具
[ "$3" = 'PREROUTING' ] && [ "$macfilter_type" != "白名单" ] && { [ "$3" = 'PREROUTING' ] && [ "$macfilter_type" != "白名单" ] && {
[ -s "$CRASHDIR"/configs/mac ] && [ -s "$CRASHDIR"/configs/mac ] &&
for mac in $(cat "$CRASHDIR"/configs/mac); do for mac in $(cat "$CRASHDIR"/configs/mac); do
$1 $w -t $2 -A $4 -m mac --mac-source $mac -j RETURN $1 $w -t $2 -A $4 -m mac --mac-. $mac -j RETURN
done done
[ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] && [ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] &&
for ip in $(cat "$CRASHDIR"/configs/ip_filter); do for ip in $(cat "$CRASHDIR"/configs/ip_filter); do
@@ -1044,7 +1045,7 @@ start_ipt_route() { #iptables-route通用工具
if [ "$3" = 'PREROUTING' ] && [ "$4" != 'shellcrash_vm' ] && [ "$macfilter_type" = "白名单" ] && [ -n "$(cat $CRASHDIR/configs/mac $CRASHDIR/configs/ip_filter 2>/dev/null)" ]; then if [ "$3" = 'PREROUTING' ] && [ "$4" != 'shellcrash_vm' ] && [ "$macfilter_type" = "白名单" ] && [ -n "$(cat $CRASHDIR/configs/mac $CRASHDIR/configs/ip_filter 2>/dev/null)" ]; then
[ -s "$CRASHDIR"/configs/mac ] && [ -s "$CRASHDIR"/configs/mac ] &&
for mac in $(cat "$CRASHDIR"/configs/mac); do for mac in $(cat "$CRASHDIR"/configs/mac); do
$1 $w -t $2 -A $4 -p $5 -m mac --mac-source $mac -j $JUMP $1 $w -t $2 -A $4 -p $5 -m mac --mac-. $mac -j $JUMP
done done
[ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] && [ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] &&
for ip in $(cat "$CRASHDIR"/configs/ip_filter); do for ip in $(cat "$CRASHDIR"/configs/ip_filter); do
@@ -1090,7 +1091,7 @@ start_ipt_dns() { #iptables-dns通用工具
[ "$2" = 'PREROUTING' ] && [ "$macfilter_type" != "白名单" ] && { [ "$2" = 'PREROUTING' ] && [ "$macfilter_type" != "白名单" ] && {
[ -s "$CRASHDIR"/configs/mac ] && [ -s "$CRASHDIR"/configs/mac ] &&
for mac in $(cat "$CRASHDIR"/configs/mac); do for mac in $(cat "$CRASHDIR"/configs/mac); do
$1 $w -t nat -A $3 -m mac --mac-source $mac -j RETURN $1 $w -t nat -A $3 -m mac --mac-. $mac -j RETURN
done done
[ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] && [ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] &&
for ip in $(cat "$CRASHDIR"/configs/ip_filter); do for ip in $(cat "$CRASHDIR"/configs/ip_filter); do
@@ -1100,8 +1101,8 @@ start_ipt_dns() { #iptables-dns通用工具
if [ "$2" = 'PREROUTING' ] && [ "$3" != 'shellcrash_vm_dns' ] && [ "$macfilter_type" = "白名单" ] && [ -n "$(cat $CRASHDIR/configs/mac $CRASHDIR/configs/ip_filter 2>/dev/null)" ]; then if [ "$2" = 'PREROUTING' ] && [ "$3" != 'shellcrash_vm_dns' ] && [ "$macfilter_type" = "白名单" ] && [ -n "$(cat $CRASHDIR/configs/mac $CRASHDIR/configs/ip_filter 2>/dev/null)" ]; then
[ -s "$CRASHDIR"/configs/mac ] && [ -s "$CRASHDIR"/configs/mac ] &&
for mac in $(cat "$CRASHDIR"/configs/mac); do for mac in $(cat "$CRASHDIR"/configs/mac); do
$1 $w -t nat -A $3 -p tcp -m mac --mac-source $mac -j REDIRECT --to-ports $dns_port $1 $w -t nat -A $3 -p tcp -m mac --mac-. $mac -j REDIRECT --to-ports $dns_port
$1 $w -t nat -A $3 -p udp -m mac --mac-source $mac -j REDIRECT --to-ports $dns_port $1 $w -t nat -A $3 -p udp -m mac --mac-. $mac -j REDIRECT --to-ports $dns_port
done done
[ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] && [ -s "$CRASHDIR"/configs/ip_filter ] && [ "$1" = 'iptables' ] &&
for ip in $(cat "$CRASHDIR"/configs/ip_filter); do for ip in $(cat "$CRASHDIR"/configs/ip_filter); do

View File

@@ -6,7 +6,7 @@
[ -z "$BINDIR" ] && BINDIR=${CRASHDIR} [ -z "$BINDIR" ] && BINDIR=${CRASHDIR}
CFG_PATH=${CRASHDIR}/configs/ShellCrash.cfg CFG_PATH=${CRASHDIR}/configs/ShellCrash.cfg
TMPDIR=/tmp/ShellCrash && [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR} TMPDIR=/tmp/ShellCrash && [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR}
source $CFG_PATH >/dev/null 2>&1 . $CFG_PATH >/dev/null 2>&1
[ -n "$(tar --help 2>&1|grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容 [ -n "$(tar --help 2>&1|grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容
setconfig(){ setconfig(){
@@ -21,7 +21,7 @@ ckcmd(){ #检查命令是否存在
#任务命令 #任务命令
check_update(){ #检查更新工具 check_update(){ #检查更新工具
${CRASHDIR}/start.sh get_bin ${TMPDIR}/crashversion "bin/version" echooff ${CRASHDIR}/start.sh get_bin ${TMPDIR}/crashversion "bin/version" echooff
[ "$?" = "0" ] && source ${TMPDIR}/crashversion 2>/dev/null [ "$?" = "0" ] && . ${TMPDIR}/crashversion 2>/dev/null
rm -rf ${TMPDIR}/crashversion rm -rf ${TMPDIR}/crashversion
} }
update_core(){ #自动更新内核 update_core(){ #自动更新内核
@@ -109,7 +109,7 @@ update_scripts(){ #自动更新脚本
${CRASHDIR}/start.sh start ${CRASHDIR}/start.sh start
return 1 return 1
else else
source ${CRASHDIR}/init.sh >/dev/null . ${CRASHDIR}/init.sh >/dev/null
${CRASHDIR}/start.sh start ${CRASHDIR}/start.sh start
return 0 return 0
fi fi

View File

@@ -1097,7 +1097,7 @@ set_core_config(){ #配置文件功能
exit exit
;; ;;
5) 5)
source ${CRASHDIR}/task/task.sh && task_menu . ${CRASHDIR}/task/task.sh && task_menu
set_core_config set_core_config
;; ;;
6) 6)
@@ -1200,7 +1200,7 @@ getscripts(){ #更新脚本文件
echo -e "\033[33m文件解压失败\033[0m" echo -e "\033[33m文件解压失败\033[0m"
error_down error_down
else else
source ${CRASHDIR}/init.sh >/dev/null . ${CRASHDIR}/init.sh >/dev/null
echo -e "\033[32m脚本更新成功\033[0m" echo -e "\033[32m脚本更新成功\033[0m"
fi fi
fi fi
@@ -1305,7 +1305,7 @@ switch_core(){ #clash与singbox内核切换
else else
COMMAND='"$TMPDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"' COMMAND='"$TMPDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"'
fi fi
setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && source ${CRASHDIR}/configs/command.env setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && . ${CRASHDIR}/configs/command.env
} }
getcore(){ #下载内核文件 getcore(){ #下载内核文件
[ -z "$crashcore" ] && crashcore=meta [ -z "$crashcore" ] && crashcore=meta
@@ -1709,7 +1709,7 @@ setcustgeo(){ #下载自定义数据库文件
esac esac
} }
setgeo(){ #数据库选择菜单 setgeo(){ #数据库选择菜单
source $CFG_PATH > /dev/null . $CFG_PATH > /dev/null
[ -n "$cn_mini_v" ] && geo_type_des=精简版 || geo_type_des=全球版 [ -n "$cn_mini_v" ] && geo_type_des=精简版 || geo_type_des=全球版
echo ----------------------------------------------- echo -----------------------------------------------
echo -e "\033[36m请选择需要更新的Geo/CN数据库文件\033[0m" echo -e "\033[36m请选择需要更新的Geo/CN数据库文件\033[0m"
@@ -2136,10 +2136,13 @@ setserver(){
} }
#检查更新 #检查更新
checkupdate(){ checkupdate(){
${CRASHDIR}/start.sh get_bin ${TMPDIR}/version_new bin/version echooff ${CRASHDIR}/start.sh get_bin ${TMPDIR}/version_new version echooff
[ "$?" = "0" ] && version_new=$(cat ${TMPDIR}/version_new | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }') [ "$?" = "0" ] && {
if [ -n "$version_new" ];then version_new=$(cat ${TMPDIR}/version_new)
source ${TMPDIR}/version_new 2>/dev/null ${CRASHDIR}/start.sh get_bin ${TMPDIR}/version_new bin/version echooff
}
if [ "$?" = "0" ];then
. ${TMPDIR}/version_new 2>/dev/null
else else
echo -e "\033[31m检查更新失败请尝试切换其他安装源\033[0m" echo -e "\033[31m检查更新失败请尝试切换其他安装源\033[0m"
setserver setserver
@@ -2211,7 +2214,7 @@ update(){
setserver setserver
update update
elif [ "$num" = 8 ]; then elif [ "$num" = 8 ]; then
source ${CRASHDIR}/task/task.sh && task_add . ${CRASHDIR}/task/task.sh && task_add
update update
elif [ "$num" = 9 ]; then elif [ "$num" = 9 ]; then
@@ -2375,7 +2378,7 @@ userguide(){
fi fi
fi fi
#启用推荐的自动任务配置 #启用推荐的自动任务配置
source ${CRASHDIR}/task/task.sh && task_recom . ${CRASHDIR}/task/task.sh && task_recom
#小米设备软固化 #小米设备软固化
if [ "$systype" = "mi_snapshot" ];then if [ "$systype" = "mi_snapshot" ];then
echo ----------------------------------------------- echo -----------------------------------------------

1
version Normal file
View File

@@ -0,0 +1 @@
1.9.3beta3