diff --git a/ShellCrash.tar.gz b/ShellCrash.tar.gz index 1f812972..d1e8332d 100644 Binary files a/ShellCrash.tar.gz and b/ShellCrash.tar.gz differ diff --git a/bin/version b/bin/version index 00bfec96..08d143a3 100644 --- a/bin/version +++ b/bin/version @@ -1,4 +1,4 @@ meta_v=v1.19.17 singboxr_v=1.13.0-alpha.27 -versionsh=1.9.5beta3 +versionsh=1.9.5beta4 GeoIP_v=20251205 diff --git a/scripts/init.sh b/scripts/init.sh index 46295b78..338aed1c 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -83,16 +83,27 @@ for file in start.sh starts/bfstart.sh starts/afstart.sh starts/fw_stop.sh start done setconfig versionsh_l $version #生成用于执行启动服务的变量文件 -[ ! -f "$CRASHDIR"/configs/command.env ] && { - echo 'TMPDIR=/tmp/ShellCrash' > "$CRASHDIR"/configs/command.env - echo "BINDIR=$CRASHDIR" >> "$CRASHDIR"/configs/command.env -} +DIRECTORIES_FILE="$CRASHDIR"/configs/directories.env +COMMAND_FILE="$CRASHDIR"/configs/command.env +if [ ! -f "$DIRECTORIES_FILE" ]; then + #迁移旧版中与启动命令混放的目录变量 + if [ -f "$COMMAND_FILE" ]; then + . "$COMMAND_FILE" + fi + [ -z "$TMPDIR" ] && TMPDIR=/tmp/ShellCrash + [ -z "$BINDIR" ] && BINDIR=$CRASHDIR + printf 'TMPDIR=%s\nBINDIR=%s\n' "$TMPDIR" "$BINDIR" > "$DIRECTORIES_FILE" + [ -f "$COMMAND_FILE" ] && sed -i '/^TMPDIR=.*/d; /^BINDIR=.*/d' "$COMMAND_FILE" +else + . "$DIRECTORIES_FILE" +fi +[ -f "$COMMAND_FILE" ] || : > "$COMMAND_FILE" if [ -n "$(grep 'crashcore=singbox' "$CFG_PATH")" ]; then COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"' else COMMAND='"$TMPDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"' fi -setconfig COMMAND "$COMMAND" "$CRASHDIR"/configs/command.env +setconfig COMMAND "$COMMAND" "$COMMAND_FILE" #设置防火墙执行模式 grep -q 'firewall_mod' "$CRASHDIR/configs/ShellClash.cfg" 2>/dev/null || { firewall_mod=iptables diff --git a/scripts/libs/get_config.sh b/scripts/libs/get_config.sh index 9b5fd3ef..a61cc32e 100644 --- a/scripts/libs/get_config.sh +++ b/scripts/libs/get_config.sh @@ -2,6 +2,7 @@ # 检查配置文件 [ -z "$TASKCFGDIR" ] && TASKCFGDIR="$CRASHDIR"/configs/task [ -f "$CRASHDIR"/configs/ShellCrash.cfg ] || . "$CRASHDIR"/init.sh >/dev/null 2>&1 +[ -f "$CRASHDIR"/configs/directories.env ] && . "$CRASHDIR"/configs/directories.env >/dev/null 2>&1 . "$CRASHDIR"/configs/command.env >/dev/null 2>&1 . "$CRASHDIR"/configs/ShellCrash.cfg diff --git a/scripts/libs/start_wait.sh b/scripts/libs/start_wait.sh index 2daa7201..e8918b52 100644 --- a/scripts/libs/start_wait.sh +++ b/scripts/libs/start_wait.sh @@ -1,10 +1,15 @@ -i=1 -while [ -z "$test" -a "$i" -lt 30 ]; do - sleep 1 - if curl --version >/dev/null 2>&1; then - test=$(curl -s -H "Authorization: Bearer $secret" http://127.0.0.1:${db_port}/proxies | grep -o proxies) - else - test=$(wget -q --header="Authorization: Bearer $secret" -O - http://127.0.0.1:${db_port}/proxies | grep -o proxies) - fi - i=$((i + 1)) -done +if [ "$network_check" = "OFF" ]; then + #复用网络检查开关:禁用自启网络检查时,也跳过启动后的面板端口校验 + test=skip +else + i=1 + while [ -z "$test" ] && [ "$i" -lt 30 ]; do + sleep 1 + if curl --version >/dev/null 2>&1; then + test=$(curl -s -H "Authorization: Bearer $secret" http://127.0.0.1:${db_port}/proxies | grep -o proxies) + else + test=$(wget -q --header="Authorization: Bearer $secret" -O - http://127.0.0.1:${db_port}/proxies | grep -o proxies) + fi + i=$((i + 1)) + done +fi diff --git a/scripts/menus/4_setboot.sh b/scripts/menus/4_setboot.sh index 7a153f5a..9f5bc033 100644 --- a/scripts/menus/4_setboot.sh +++ b/scripts/menus/4_setboot.sh @@ -131,7 +131,7 @@ setboot() { msg_alert "\033[33m$SETBOOT_MINI_DISABLED\033[0m" fi fi - sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env + sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/directories.env sleep 1 ;; 5) @@ -155,8 +155,8 @@ setboot() { set_usb_dir() { while true; do comp_box "$SETBOOT_SELECT_INSTALL_DIR" - du -hL /mnt | - awk '{print NR") "$2" ($SETBOOT_SPACE_USED$1")"}' | + du -hL -d 2 /mnt | + awk '{print NR") "$2" ($SETBOOT_SPACE_USED"$1")"}' | while IFS= read -r line; do content_line "$line" done @@ -164,7 +164,7 @@ setboot() { content_line "0) $COMMON_BACK" separator_line "=" read -r -p "$COMMON_INPUT> " num - BINDIR=$(du -hL /mnt | awk '{print $2}' | sed -n "$num"p) + BINDIR=$(du -hL -d 2 /mnt | awk '{print $2}' | sed -n "$num"p) if [ "$num" = 0 ]; then return 1 elif [ -z "$BINDIR" ]; then @@ -203,7 +203,7 @@ setboot() { continue ;; esac - sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env + sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/directories.env break done ;; diff --git a/scripts/menus/5_task.sh b/scripts/menus/5_task.sh index 735773c6..c1d269e8 100644 --- a/scripts/menus/5_task.sh +++ b/scripts/menus/5_task.sh @@ -229,8 +229,8 @@ task_type() { [ -n "$cron_time" ] && set_service running "$task_id" "$TASK5_RUNNING_PREFIX$time_des$task_name" "$cron_time" ;; 8) - comp_box "$TASK5_AFFW_HINT" - "$TASK5_CONFIRM_CONTINUE" + comp_box "$TASK5_AFFW_HINT" \ + "$TASK5_CONFIRM_CONTINUE" btm_box "1) $TASK5_YES" \ "0) $TASK5_NO" read -r -p "$COMMON_INPUT> " res diff --git a/scripts/menus/running_status.sh b/scripts/menus/running_status.sh index 3da02535..cfe86dea 100644 --- a/scripts/menus/running_status.sh +++ b/scripts/menus/running_status.sh @@ -7,7 +7,7 @@ running_status(){ if [ -n "$start_time" ]; then time=$(($(date +%s) - start_time)) day=$((time / 86400)) - [ "$day" = "0" ] && day='' || day="$dayD" + [ "$day" = "0" ] && day='' || day="${day}D" time=$(date -u -d @${time} +%H:%M:%S) fi } diff --git a/scripts/menus/task_cmd.sh b/scripts/menus/task_cmd.sh index 4aee5f21..0b1982e2 100644 --- a/scripts/menus/task_cmd.sh +++ b/scripts/menus/task_cmd.sh @@ -135,7 +135,7 @@ hotupdate() { #热更新订阅 . "$CRASHDIR"/starts/core_config.sh && get_core_config && . "$CRASHDIR"/starts/check_core.sh && check_core && . "$CRASHDIR"/starts/"$target"_modify.sh && modify_"$format" && rm -rf "$TMPDIR"/CrashCore && - . "$CRASHDIR"/libs/web_restore.sh && put_save "http://127.0.0.1:$db_port/configs" "{\"path\":\"$TMPDIR/config.$format\"}" + . "$CRASHDIR"/libs/web_restore.sh && put_save "http://127.0.0.1:$db_port/configs" "{\"path\":\"$CRASHDIR/config.$format\"}" exit $? } diff --git a/scripts/menus/userguide.sh b/scripts/menus/userguide.sh index 995ef1dd..a6e2e982 100644 --- a/scripts/menus/userguide.sh +++ b/scripts/menus/userguide.sh @@ -124,7 +124,7 @@ userguide() { read -r -p "$COMMON_INPUT_R" res [ "$res" = 1 ] && { BINDIR=/tmp/ShellCrash - sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/command.env + sed -i "s#BINDIR=.*#BINDIR=$BINDIR#" "$CRASHDIR"/configs/directories.env } fi diff --git a/scripts/starts/check_core.sh b/scripts/starts/check_core.sh index 9c99b9a3..15073229 100644 --- a/scripts/starts/check_core.sh +++ b/scripts/starts/check_core.sh @@ -1,6 +1,7 @@ . "$CRASHDIR"/libs/check_target.sh . "$CRASHDIR"/libs/core_tools.sh +. "$CRASHDIR"/configs/directories.env . "$CRASHDIR"/configs/command.env check_core() { #检查及下载内核文件 diff --git a/scripts/starts/clash_config_check.sh b/scripts/starts/clash_config_check.sh index 96e85c80..83bdaf4a 100644 --- a/scripts/starts/clash_config_check.sh +++ b/scripts/starts/clash_config_check.sh @@ -4,6 +4,9 @@ check_config() { #检查clash配置文件 #检测节点或providers sed -n "/^proxies:/,/^[a-z]/ { /^[a-z]/d; p; }" "$core_config_new" >"$TMPDIR"/proxies.yaml + if [ ! -s "$TMPDIR"/proxies.yaml ]; then + sed -n 's/^proxies:[[:space:]]*\[\(.*\)\][[:space:]]*$/ - \1/p' "$core_config_new" >"$TMPDIR"/proxies.yaml + fi if ! grep -Eq 'server:|server":|server'\'':' "$TMPDIR"/proxies.yaml && ! grep -q 'proxy-providers:' "$core_config_new"; then echo "-----------------------------------------------" logger "获取到了配置文件【$core_config_new】,但似乎并不包含正确的节点信息!" 31 @@ -38,4 +41,4 @@ check_config() { #检查clash配置文件 done <"$TMPDIR"/clash_proxies rm -rf "$TMPDIR"/clash_proxies } -} \ No newline at end of file +} diff --git a/scripts/starts/clash_modify.sh b/scripts/starts/clash_modify.sh index 01b103a5..ca30509f 100644 --- a/scripts/starts/clash_modify.sh +++ b/scripts/starts/clash_modify.sh @@ -136,6 +136,10 @@ split_and_customize_yaml_parts() { yaml_char='proxies proxy-groups proxy-providers rules rule-providers sub-rules listeners' for char in $yaml_char; do sed -n "/^$char:/,/^[a-z]/ { /^[a-z]/d; p; }" $core_config >"$TMPDIR"/${char}.yaml + #支持 Clash 常见的单行 flow-style 节点列表,例如 proxies: [{name: ..., type: ...}] + if [ "$char" = proxies ] && [ ! -s "$TMPDIR"/proxies.yaml ]; then + sed -n 's/^proxies:[[:space:]]*\[\(.*\)\][[:space:]]*$/ - \1/p' "$core_config" >"$TMPDIR"/proxies.yaml + fi done #跳过本地tls证书验证 [ "$skip_cert" != "OFF" ] && sed -i 's/skip-cert-verify: false/skip-cert-verify: true/' "$TMPDIR"/proxies.yaml || diff --git a/scripts/starts/shellcrash.openrc b/scripts/starts/shellcrash.openrc index 9d0ff118..cf777c52 100644 --- a/scripts/starts/shellcrash.openrc +++ b/scripts/starts/shellcrash.openrc @@ -6,7 +6,8 @@ description="Custom proxy service for ShellCrash" #获取目录 CRASHDIR=$(cat /etc/profile | grep CRASHDIR | awk -F "\"" '{print $2}') [ -z "$CRASHDIR" ] && CRASHDIR=$(cat ~/.bashrc | grep CRASHDIR | awk -F "\"" '{print $2}') -. ${CRASHDIR}/configs/command.env #加载启动命令和启动目录 +. "${CRASHDIR}"/configs/directories.env #加载启动目录 +. "${CRASHDIR}"/configs/command.env #加载启动命令 # PID 文件 pidfile="/run/shellcrash.pid" diff --git a/scripts/starts/shellcrash.procd b/scripts/starts/shellcrash.procd index ac9b6cb7..4df79a60 100644 --- a/scripts/starts/shellcrash.procd +++ b/scripts/starts/shellcrash.procd @@ -8,7 +8,8 @@ USE_PROCD=1 #获取目录 CRASHDIR=$(cat /etc/profile | grep CRASHDIR | awk -F "\"" '{print $2}') [ -z "$CRASHDIR" ] && CRASHDIR=$(cat ~/.bashrc | grep CRASHDIR | awk -F "\"" '{print $2}') -. "$CRASHDIR"/configs/command.env #加载启动命令和启动目录 +. "$CRASHDIR"/configs/directories.env #加载启动目录 +. "$CRASHDIR"/configs/command.env #加载启动命令 start_service() { if [ -n "$(cat $CRASHDIR/configs/ShellCrash.cfg | grep 'firewall_area=5')" ]; then diff --git a/version b/version index 9064e968..197d6051 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.9.5beta3 +1.9.5beta4