chore(menu.sh): invoke the common.sh component

This commit is contained in:
sofia-riese
2026-01-31 17:34:52 +08:00
parent 2536cae8fe
commit 6fd9f9df03
3 changed files with 277 additions and 327 deletions

View File

@@ -2,8 +2,8 @@
# Copyright (C) Juewuy # Copyright (C) Juewuy
CRASHDIR=$( CRASHDIR=$(
cd $(dirname $0) cd $(dirname $0)
pwd pwd
) )
CFG_PATH="$CRASHDIR"/configs/ShellCrash.cfg CFG_PATH="$CRASHDIR"/configs/ShellCrash.cfg
@@ -32,360 +32,320 @@ load_lang common
load_lang menu load_lang menu
checkrestart() { checkrestart() {
line_break comp_box "\033[32m$MENU_RESTART_NOTICE\033[0m"
separator_line "=" btm_box "1) 立即重启" \
content_line "\033[32m$MENU_RESTART_NOTICE\033[0m" "0) 暂不重启"
separator_line "=" read -r -p "$COMMON_INPUT> " res
content_line "1) 立即重启" if [ "$res" = 1 ]; then
content_line "0) 暂不重启" start_service
separator_line "=" fi
read -r -p "$COMMON_INPUT> " res
if [ "$res" = 1 ]; then
start_service
fi
} }
# 检查端口冲突 # 检查端口冲突
checkport() { checkport() {
while true; do while true; do
# Before each round of checks begins, execute netstat only once and cache the results # Before each round of checks begins, execute netstat only once and cache the results
# Avoid calling the system command once for each port # Avoid calling the system command once for each port
current_listening=$(netstat -ntul 2>&1) current_listening=$(netstat -ntul 2>&1)
conflict_found=0 conflict_found=0
for portx in $dns_port $mix_port $redir_port $((redir_port + 1)) $db_port; do for portx in $dns_port $mix_port $redir_port $((redir_port + 1)) $db_port; do
# Use `grep` to search within the cached variables instead of re-running `netstat` # Use `grep` to search within the cached variables instead of re-running `netstat`
conflict_line=$(echo "$current_listening" | grep ":$portx ") conflict_line=$(echo "$current_listening" | grep ":$portx ")
if [ -n "$conflict_line" ]; then if [ -n "$conflict_line" ]; then
line_break
separator_line "="
content_line "$portx】:$MENU_PORT_CONFLICT_TITLE"
content_line "\033[0m$(echo "$conflict_line" | head -n 1)\033[0m"
content_line "\033[36m$MENU_PORT_CONFLICT_HINT\033[0m"
separator_line "="
. "$CRASHDIR"/menus/2_settings.sh && set_adv_config comp_box "$portx】:$MENU_PORT_CONFLICT_TITLE" \
. "$CRASHDIR"/libs/get_config.sh "\033[0m$(echo "$conflict_line" | head -n 1)\033[0m" \
"\033[36m$MENU_PORT_CONFLICT_HINT\033[0m"
# Mark conflict and exit the for loop, triggering the while loop to restart the check . "$CRASHDIR"/menus/2_settings.sh && set_adv_config
# This replaces the original recursive call to `checkport` . "$CRASHDIR"/libs/get_config.sh
conflict_found=1
break
fi
done
# If no conflicts are found after the entire for loop completes, # Mark conflict and exit the for loop, triggering the while loop to restart the check
# the while loop exits and the function terminates. # This replaces the original recursive call to `checkport`
if [ "$conflict_found" -eq 0 ]; then conflict_found=1
break break
fi fi
done done
# If no conflicts are found after the entire for loop completes,
# the while loop exits and the function terminates.
if [ "$conflict_found" -eq 0 ]; then
break
fi
done
} }
# 脚本启动前检查 # 脚本启动前检查
ckstatus() { ckstatus() {
versionsh=$(cat "$CRASHDIR"/version) versionsh=$(cat "$CRASHDIR"/version)
[ -n "$versionsh" ] && versionsh_l=$versionsh [ -n "$versionsh" ] && versionsh_l=$versionsh
[ -z "$redir_mod" ] && redir_mod="$MENU_PURE_MOD" [ -z "$redir_mod" ] && redir_mod="$MENU_PURE_MOD"
# 获取本机host地址 # 获取本机host地址
[ -z "$host" ] && host=$(ubus call network.interface.lan status 2>&1 | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') [ -z "$host" ] && host=$(ubus call network.interface.lan status 2>&1 | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
[ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'lan' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1) [ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'lan' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1)
[ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1) [ -z "$host" ] && host=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/\/[0-9][0-9].*$//g' | head -n 1)
[ -z "$host" ] && host='$MENU_IP_DF' [ -z "$host" ] && host='$MENU_IP_DF'
# dashboard目录位置 # dashboard目录位置
if [ -f /www/clash/index.html ]; then if [ -f /www/clash/index.html ]; then
dbdir=/www/clash dbdir=/www/clash
hostdir=/clash hostdir=/clash
else else
dbdir="$CRASHDIR"/ui dbdir="$CRASHDIR"/ui
hostdir=":$db_port/ui" hostdir=":$db_port/ui"
fi fi
if check_autostart; then if check_autostart; then
auto="\033[32m$MENU_AUTOSTART_ON\033[0m" auto="\033[32m$MENU_AUTOSTART_ON\033[0m"
else else
auto="\033[31m$MENU_AUTOSTART_OFF\033[0m" auto="\033[31m$MENU_AUTOSTART_OFF\033[0m"
fi fi
PID=$(pidof CrashCore | awk '{print $NF}') PID=$(pidof CrashCore | awk '{print $NF}')
if [ -n "$PID" ]; then if [ -n "$PID" ]; then
run="\033[32m$MENU_RUN_ON$redir_mod$MENU_MOD\033[0m" run="\033[32m$MENU_RUN_ON$redir_mod$MENU_MOD\033[0m"
running_status running_status
elif [ "$firewall_area" = 5 ] && [ -n "$(ip route list table 100)" ]; then elif [ "$firewall_area" = 5 ] && [ -n "$(ip route list table 100)" ]; then
run="\033[32m$MENU_RUN_SET$redir_mod$MENU_MOD\033[0m" run="\033[32m$MENU_RUN_SET$redir_mod$MENU_MOD\033[0m"
else else
run="\033[31m$MENU_RUN_OFF$redir_mod$MENU_MOD\033[0m" run="\033[31m$MENU_RUN_OFF$redir_mod$MENU_MOD\033[0m"
# 检测系统端口占用 # 检测系统端口占用
checkport checkport
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/')
# [ "$firewall_area" = 5 ] && corename='转发' # [ "$firewall_area" = 5 ] && corename='转发'
[ -f "$TMPDIR"/debug.log -o -f "$CRASHDIR"/debug.log -a -n "$PID" ] && auto="\033[33m$MENU_AUTOSTART_DEBUG\033[0m" [ -f "$TMPDIR"/debug.log -o -f "$CRASHDIR"/debug.log -a -n "$PID" ] && auto="\033[33m$MENU_AUTOSTART_DEBUG\033[0m"
# 检查新手引导 # 检查新手引导
if [ -z "$userguide" ]; then if [ -z "$userguide" ]; then
userguide=1 userguide=1
. "$CRASHDIR"/menus/userguide.sh && userguide . "$CRASHDIR"/menus/userguide.sh && userguide
setconfig userguide 1 setconfig userguide 1
fi fi
# 检查执行权限 # 检查执行权限
[ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh [ ! -x "$CRASHDIR"/start.sh ] && chmod +x "$CRASHDIR"/start.sh
line_break line_break
separator_line "=" separator_line "="
content_line "\033[30;43m$MENU_WELCOME\033[0m" content_line "\033[30;43m$MENU_WELCOME\033[0m"
content_right "Ver: $versionsh_l" content_line "Ver: $versionsh_l"
content_line "$MENU_TG_CHANNEL\033[36;4mhttps://t.me/ShellClash\033[0m" content_line "$MENU_TG_CHANNEL\033[36;4mhttps://t.me/ShellClash\033[0m"
separator_line "-" separator_line "-"
content_line "$corename$run\t $auto" content_line "$corename$run\t $auto"
if [ -n "$PID" ]; then if [ -n "$PID" ]; then
content_line "$MENU_MEM_USED\033[44m$VmRSS\033[0m\t $MENU_RUNNING_TIME\033[46;30m$day\033[44;37m$time\033[0m" content_line "$MENU_MEM_USED\033[44m$VmRSS\033[0m\t $MENU_RUNNING_TIME\033[46;30m$day\033[44;37m$time\033[0m"
fi fi
separator_line "=" separator_line "="
# 检查/tmp内核文件 # 检查/tmp内核文件
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -Ev ".*(zip|7z|tar)$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box'); do
line_break comp_box "$MENU_TMP_CORE_FOUND \033[36m/tmp/$file\033[0m" \
separator_line "=" "$MENU_TMP_CORE_ASK"
content_line "$MENU_TMP_CORE_FOUND \033[36m/tmp/$file\033[0m" btm_box "1) 立即加载" \
content_line "$MENU_TMP_CORE_ASK" "0) 暂不加载"
separator_line "=" read -r -p "$COMMON_INPUT> " res
content_line "1) 立即加载" [ "$res" = 1 ] && {
content_line "0) 暂不加载" zip_type=$(echo "$file" | grep -oE 'tar.gz$|upx$|gz$')
separator_line "=" . "$CRASHDIR"/menus/9_upgrade.sh && setcoretype
read -r -p "$COMMON_INPUT> " res . "$CRASHDIR"/libs/core_tools.sh && core_check "/tmp/$file"
[ "$res" = 1 ] && { if [ "$?" = 0 ]; then
line_break msg_alert "\033[32m$MENU_CORE_LOADED_OK\033[0m"
separator_line "=" switch_core
zip_type=$(echo "$file" | grep -oE 'tar.gz$|upx$|gz$') else
. "$CRASHDIR"/menus/9_upgrade.sh && setcoretype rm -rf /tmp/"$file"
. "$CRASHDIR"/libs/core_tools.sh && core_check "/tmp/$file" msg_alert "\033[33m$MENU_CORE_LOADED_BAD\033[0m" \
if [ "$?" = 0 ]; then "\033[33m$MENU_CORE_REMOVED\033[0m"
content_line "\033[32m$MENU_CORE_LOADED_OK\033[0m" fi
separator_line "=" }
switch_core done
else
content_line "\033[33m$MENU_CORE_LOADED_BAD\033[0m"
rm -rf /tmp/"$file"
content_line "\033[33m$MENU_CORE_REMOVED\033[0m"
fi
separator_line "="
sleep 1
}
done
# 检查/tmp配置文件 # 检查/tmp配置文件
for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do for file in $(ls /tmp | grep -v [/$] | grep -v ' ' | grep -iE 'config.yaml$|config.yml$|config.json$'); do
tmp_file=/tmp/$file tmp_file=/tmp/$file
line_break comp_box "$MENU_TMP_CFG_FOUND \033[36m/tmp/$file\033[0m" \
separator_line "=" "$MENU_TMP_CFG_ASK"
content_line "$MENU_TMP_CFG_FOUND \033[36m/tmp/$file\033[0m" btm_box "1) 立即加载" \
content_line "$MENU_TMP_CFG_ASK" "0) 暂不加载"
separator_line "=" read -p "$COMMON_INPUT> " res
content_line "1) 立即加载" [ "$res" = 1 ] && {
content_line "0) 暂不加载" if [ -n "$(echo /tmp/$file | grep -iE '.json$')" ]; then
separator_line "=" mv -f /tmp/$file "$CRASHDIR"/jsons/config.json
read -p "$COMMON_INPUT> " res else
[ "$res" = 1 ] && { mv -f /tmp/$file "$CRASHDIR"/yamls/config.yaml
if [ -n "$(echo /tmp/$file | grep -iE '.json$')" ]; then fi
mv -f /tmp/$file "$CRASHDIR"/jsons/config.json msg_alert "\033[32m$MENU_CFG_LOADED_OK\033[0m "
else }
mv -f /tmp/$file "$CRASHDIR"/yamls/config.yaml done
fi
line_break
separator_line "="
content_line "\033[32m$MENU_CFG_LOADED_OK\033[0m "
separator_line "="
sleep 1
}
done
# 检查禁用配置覆写 # 检查禁用配置覆写
[ "$disoverride" = "1" ] && { [ "$disoverride" = "1" ] && {
line_break comp_box "\033[33m$MENU_OVERRIDE_WARN\033[0m" \
separator_line "=" "$MENU_OVERRIDE_ASK"
content_line "\033[33m$MENU_OVERRIDE_WARN\033[0m" btm_box "1) 是" \
content_line "$MENU_OVERRIDE_ASK" "0) 否"
separator_line "=" read -p "$COMMON_INPUT> " res
content_line "1) 是" [ "$res" = 1 ] && unset disoverride && setconfig disoverride
content_line "0) 否" }
separator_line "="
read -p "$COMMON_INPUT> " res
[ "$res" = 1 ] && unset disoverride && setconfig disoverride
}
} }
main_menu() { main_menu() {
while true; do while true; do
ckstatus ckstatus
content_line "1) \033[32m$MENU_MAIN_1\033[0m" content_line "1) \033[32m$MENU_MAIN_1\033[0m"
content_line "2) \033[36m$MENU_MAIN_2\033[0m" content_line "2) \033[36m$MENU_MAIN_2\033[0m"
content_line "3) \033[31m$MENU_MAIN_3\033[0m" content_line "3) \033[31m$MENU_MAIN_3\033[0m"
content_line "4) \033[33m$MENU_MAIN_4\033[0m" content_line "4) \033[33m$MENU_MAIN_4\033[0m"
content_line "5) \033[32m$MENU_MAIN_5\033[0m" content_line "5) \033[32m$MENU_MAIN_5\033[0m"
content_line "6) \033[36m$MENU_MAIN_6\033[0m" content_line "6) \033[36m$MENU_MAIN_6\033[0m"
content_line "7) \033[33m$MENU_MAIN_7\033[0m" content_line "7) \033[33m$MENU_MAIN_7\033[0m"
content_line "8) $MENU_MAIN_8" content_line "8) $MENU_MAIN_8"
content_line "9) \033[32m$MENU_MAIN_9\033[0m" content_line "9) \033[32m$MENU_MAIN_9\033[0m"
content_line "0) $MENU_MAIN_0" content_line "0) $MENU_MAIN_0"
separator_line "=" separator_line "="
read -r -p "$MENU_MAIN_PROMPT" num read -r -p "$MENU_MAIN_PROMPT" num
case "$num" in case "$num" in
"" | 0) "" | 0)
line_break line_break
exit 0 exit 0
;; ;;
1) 1)
start_service start_service
exit line_break
line_break exit
;; ;;
2) 2)
checkcfg=$(cat "$CFG_PATH") checkcfg=$(cat "$CFG_PATH")
. "$CRASHDIR"/menus/2_settings.sh && settings . "$CRASHDIR"/menus/2_settings.sh && settings
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
fi fi
;; ;;
3) 3)
[ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop [ "$bot_tg_service" = ON ] && . "$CRASHDIR"/menus/bot_tg_service.sh && bot_tg_stop
"$CRASHDIR"/start.sh stop "$CRASHDIR"/start.sh stop
sleep 1 sleep 1
line_break msg_alert "\033[31m$corename$MENU_SERVICE_STOPPED\033[0m"
separator_line "=" ;;
content_line "\033[31m$corename$MENU_SERVICE_STOPPED\033[0m" 4)
separator_line "=" . "$CRASHDIR"/menus/4_setboot.sh && setboot
sleep 1 ;;
;; 5)
4) . "$CRASHDIR"/menus/5_task.sh && task_menu
. "$CRASHDIR"/menus/4_setboot.sh && setboot ;;
;; 6)
5) . "$CRASHDIR"/menus/6_core_config.sh && set_core_config
. "$CRASHDIR"/menus/5_task.sh && task_menu ;;
;; 7)
6) GT_CFG_PATH="$CRASHDIR"/configs/gateway.cfg
. "$CRASHDIR"/menus/6_core_config.sh && set_core_config touch "$GT_CFG_PATH"
;; checkcfg=$(cat "$CFG_PATH" "$GT_CFG_PATH")
7) . "$CRASHDIR"/menus/7_gateway.sh && gateway
GT_CFG_PATH="$CRASHDIR"/configs/gateway.cfg if [ -n "$PID" ]; then
touch "$GT_CFG_PATH" checkcfg_new=$(cat "$CFG_PATH" "$GT_CFG_PATH")
checkcfg=$(cat "$CFG_PATH" "$GT_CFG_PATH") [ "$checkcfg" != "$checkcfg_new" ] && checkrestart
. "$CRASHDIR"/menus/7_gateway.sh && gateway fi
if [ -n "$PID" ]; then ;;
checkcfg_new=$(cat "$CFG_PATH" "$GT_CFG_PATH") 8)
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart . "$CRASHDIR"/menus/8_tools.sh && tools
fi ;;
;; 9)
8) checkcfg=$(cat "$CFG_PATH")
. "$CRASHDIR"/menus/8_tools.sh && tools . "$CRASHDIR"/menus/9_upgrade.sh && upgrade
;; if [ -n "$PID" ]; then
9) checkcfg_new=$(cat "$CFG_PATH")
checkcfg=$(cat "$CFG_PATH") [ "$checkcfg" != "$checkcfg_new" ] && checkrestart
. "$CRASHDIR"/menus/9_upgrade.sh && upgrade fi
if [ -n "$PID" ]; then ;;
checkcfg_new=$(cat "$CFG_PATH") *)
[ "$checkcfg" != "$checkcfg_new" ] && checkrestart errornum
fi ;;
;; esac
*) done
errornum
sleep 1
;;
esac
done
} }
case "$1" in case "$1" in
"") "")
main_menu main_menu
;; ;;
-l) -l)
main_menu main_menu
;; ;;
-t) -t)
shtype=sh shtype=sh
[ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash
"$shtype" -x "$CRASHDIR"/menu.sh -l "$shtype" -x "$CRASHDIR"/menu.sh -l
;; ;;
-s) -s)
"$CRASHDIR"/start.sh "$2" "$3" "$4" "$5" "$6" "$CRASHDIR"/start.sh "$2" "$3" "$4" "$5" "$6"
;; ;;
-i) -i)
. "$CRASHDIR"/init.sh 2>/dev/null . "$CRASHDIR"/init.sh 2>/dev/null
;; ;;
-st) -st)
shtype=sh shtype=sh
ckcmd bash && shtype=bash ckcmd bash && shtype=bash
"$shtype" -x "$CRASHDIR"/starts/bfstart.sh "$shtype" -x "$CRASHDIR"/starts/bfstart.sh
. "$CRASHDIR"/starts/start_legacy.sh . "$CRASHDIR"/starts/start_legacy.sh
start_legacy "$COMMAND" 'shellcrash' start_legacy "$COMMAND" 'shellcrash'
"$shtype" -x "$CRASHDIR"/starts/afstart.sh "$shtype" -x "$CRASHDIR"/starts/afstart.sh
"$CRASHDIR"/start.sh stop "$CRASHDIR"/start.sh stop
;; ;;
-d) -d)
shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash shtype=sh && [ -n "$(ls -l /bin/sh | grep -o dash)" ] && shtype=bash
line_break line_break
separator_line "=" separator_line "="
content_line "$MENU_TEST_RUNNING_1" content_line "$MENU_TEST_RUNNING_1"
content_line "$MENU_TEST_RUNNING_2\033[36;4mhttps://t.me/ShellClash\033[0m" content_line "$MENU_TEST_RUNNING_2\033[36;4mhttps://t.me/ShellClash\033[0m"
separator_line "=" separator_line "="
"$shtype" "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh_bug.log "$shtype" "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh_bug.log
"$shtype" -x "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh.log "$shtype" -x "$CRASHDIR"/start.sh debug >/dev/null 2>"$TMPDIR"/debug_sh.log
line_break cat "$TMPDIR"/debug_sh_bug.log | grep 'start\.sh' >"$TMPDIR"/sh_bug
cat "$TMPDIR"/debug_sh_bug.log | grep 'start\.sh' >"$TMPDIR"/sh_bug if [ -s "$TMPDIR"/sh_bug ]; then
if [ -s "$TMPDIR"/sh_bug ]; then line_break
echo "===========================================================" echo "==========================================================="
while read line; do while read line; do
echo -e "$MENU_ERROR_FOUND\033[33;4m$line\033[0m" echo -e "$MENU_ERROR_FOUND\033[33;4m$line\033[0m"
grep -A 1 -B 3 "$line" "$TMPDIR"/debug_sh.log grep -A 1 -B 3 "$line" "$TMPDIR"/debug_sh.log
echo "===========================================================" echo "==========================================================="
done <"$TMPDIR"/sh_bug done <"$TMPDIR"/sh_bug
rm -rf "$TMPDIR"/sh_bug rm -rf "$TMPDIR"/sh_bug
line_break comp_box "\033[32m$MENU_TEST_DONE_FAIL\033[0m" \
separator_line "=" "$MENU_TEST_LOG_HINT\033[36m$TMPDIR/debug_sh.log\033[0m"
content_line "\033[32m$MENU_TEST_DONE_FAIL\033[0m" else
content_line "$MENU_TEST_LOG_HINT\033[36m$TMPDIR/debug_sh.log\033[0m" rm -rf "$TMPDIR"/debug_sh.log
separator_line "=" comp_box "\033[32m$MENU_TEST_DONE_OK\033[0m"
else line_break
rm -rf "$TMPDIR"/debug_sh.log fi
separator_line "=" "$CRASHDIR"/start.sh stop
content_line "\033[32m$MENU_TEST_DONE_OK\033[0m" ;;
separator_line "="
line_break
fi
"$CRASHDIR"/start.sh stop
;;
-u) -u)
. "$CRASHDIR"/menus/uninstall.sh && uninstall . "$CRASHDIR"/menus/uninstall.sh && uninstall
;; ;;
*) *)
line_break comp_box "$MENU_WELCOME"
separator_line "=" content_line "-t $MENU_CLI_TEST"
content_line "$MENU_WELCOME" content_line "-h $MENU_CLI_HELP"
separator_line "=" content_line "-u $MENU_CLI_UNINSTALL"
content_line "-t $MENU_CLI_TEST" content_line "-i $MENU_CLI_INIT"
content_line "-h $MENU_CLI_HELP" content_line "-d $MENU_CLI_DEBUG"
content_line "-u $MENU_CLI_UNINSTALL" separator_line "-"
content_line "-i $MENU_CLI_INIT" content_line "crash -s start $MENU_CLI_START"
content_line "-d $MENU_CLI_DEBUG" content_line "crash -s stop $MENU_CLI_STOP"
separator_line "-" content_line "$CRASHDIR/start.sh init $MENU_CLI_BOOT_INIT"
content_line "crash -s start $MENU_CLI_START" separator_line "-"
content_line "crash -s stop $MENU_CLI_STOP" content_line "$MENU_HELP_ONLINE\033[36mhttps://t.me/ShellClash\033[0m"
content_line "$CRASHDIR/start.sh init $MENU_CLI_BOOT_INIT" content_line "$MENU_HELP_BLOG\033[36mhttps://juewuy.github.io\033[0m"
separator_line "-" content_line "$MENU_HELP_GITHUB\033[36mhttps://github.com/juewuy/ShellCrash\033[0m"
content_line "$MENU_HELP_ONLINE\033[36mhttps://t.me/ShellClash\033[0m" separator_line "="
content_line "$MENU_HELP_BLOG\033[36mhttps://juewuy.github.io\033[0m" line_break
content_line "$MENU_HELP_GITHUB\033[36mhttps://github.com/juewuy/ShellCrash\033[0m" ;;
separator_line "="
line_break
;;
esac esac

View File

@@ -113,11 +113,7 @@ content_line() {
END {} END {}
' '
} }
# function for right side text
# color sould be disabled
content_right() {
content_line "$(printf "%$((${TABLE_WIDTH:-60} - 3))s" "$1")"
}
# function to print sub content lines # function to print sub content lines
# for printing accompanying instructions # for printing accompanying instructions
sub_content_line() { sub_content_line() {
@@ -150,5 +146,3 @@ separator_line() {
line_break() { line_break() {
printf "\n\n" printf "\n\n"
} }

View File

@@ -5,9 +5,6 @@ content_line() {
printf '%b' " $1\n" printf '%b' " $1\n"
} }
content_right() {
printf "%$((TABLE_WIDTH - 13))s\n" "$1"
}
sub_content_line() { sub_content_line() {
content_line " $1" content_line " $1"
} }
@@ -19,4 +16,3 @@ separator_line() {
line_break() { line_break() {
return return
} }