From c81871f00beac636c360cb991e723f8e068b7d50 Mon Sep 17 00:00:00 2001 From: momen Date: Thu, 12 Mar 2026 12:32:40 +0800 Subject: [PATCH] =?UTF-8?q?update:=E6=8F=90=E6=9D=83=E6=94=AF=E6=8C=81apm?= =?UTF-8?q?=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extras/shell-caller.sh | 118 +++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 62 deletions(-) diff --git a/extras/shell-caller.sh b/extras/shell-caller.sh index e086273f..38aac794 100755 --- a/extras/shell-caller.sh +++ b/extras/shell-caller.sh @@ -1,78 +1,72 @@ #!/bin/bash -# 检查是否提供了至少一个参数 +# 1. 检查是否提供了至少一个参数 if [[ $# -eq 0 ]]; then - echo "错误:未提供命令参数。用法: $0 [aptss|ssinstall] <子命令> [参数...]" + echo "错误:未提供命令参数。" + echo "用法: $0 [apm|aptss|ssinstall] <子命令> [参数...]" exit 1 fi -# 获取第一个参数 -first_arg="$1" +# 2. 获取第一个参数作为主指令 +command_type="$1" -# 根据第一个参数决定执行哪个命令 -if [[ "$first_arg" == "ssinstall" ]]; then - # 执行 ssinstall 命令(跳过第一个参数) - /usr/bin/ssinstall "${@:2}" 2>&1 - exit_code=$? -elif [[ "$first_arg" == "aptss" ]]; then - # 检查是否为 remove 子命令(第二个参数) - if [[ "$2" == "remove" ]]; then - # 获取要卸载的软件包名称(第三个参数及以后) - packages="${@:3}" - +# 3. 根据指令类型分发逻辑 +case "$command_type" in + "apm") + # 执行 apm 命令(跳过第一个参数) + /usr/bin/apm "${@:2}" 2>&1 + exit_code=$? + ;; - # 检查可用的对话框程序 + "ssinstall") + # 执行 ssinstall 命令(跳过第一个参数) + /usr/bin/ssinstall "${@:2}" 2>&1 + exit_code=$? + ;; + + "aptss") + # 针对 aptss 的特殊逻辑:如果是 remove 子命令,需要图形化确认 + if [[ "$2" == "remove" ]]; then + packages="${@:3}" + + # 确认框通用参数 + title="确认卸载" + text="正在准备卸载: $packages\n\n若这是您下达的卸载指令,请选择确认继续卸载" + + # 优先尝试 garma,其次 zenity if command -v garma &> /dev/null; then - # 使用 garma 询问确认 - garma --question \ - --title="确认卸载" \ - --text="正在准备卸载: $packages\n若这是您下达的卸载指令,请选择确认继续卸载" \ - --ok-label="确认卸载" \ - --cancel-label="取消" \ - --width=400 - - if [[ $? -eq 0 ]]; then - # 用户确认,执行卸载 - /usr/bin/aptss "${@:2}" -y 2>&1 - exit_code=$? - else - # 用户取消 - echo "操作已取消" - exit 0 - fi + garma --question --title="$title" --text="$text" \ + --ok-label="确认卸载" --cancel-label="取消" --width=400 + confirmed=$? elif command -v zenity &> /dev/null; then - # 使用 zenity 询问确认 - zenity --question \ - --title="确认卸载" \ - --text="正在准备卸载: $packages\n\n若这是您下达的卸载指令,请选择确认继续卸载" \ - --ok-label="确认卸载" \ - --cancel-label="取消" \ - --width=400 - - if [[ $? -eq 0 ]]; then - # 用户确认,执行卸载 - /usr/bin/aptss "${@:2}" -y 2>&1 - exit_code=$? - else - # 用户取消 - echo "操作已取消" - exit 0 - fi + zenity --question --title="$title" --text="$text" \ + --ok-label="确认卸载" --cancel-label="取消" --width=400 + confirmed=$? else - # 既没有 garma 也没有 zenity,拒绝卸载 echo "错误:未找到 garma 或 zenity,无法显示确认对话框。卸载操作已拒绝。" exit 1 fi - - else - # 非 remove 命令,直接执行 - /usr/bin/aptss "${@:2}" 2>&1 - exit_code=$? - fi -else - # 其他情况,拒绝执行 - echo "拒绝执行:仅允许执行 'aptss' 或 'ssinstall' 命令。收到的第一个参数: '$first_arg'" - exit 1 -fi + + # 根据确认结果执行 + if [[ $confirmed -eq 0 ]]; then + /usr/bin/aptss "${@:2}" -y 2>&1 + exit_code=$? + else + echo "操作已取消" + exit 0 + fi + else + # 非 remove 命令,直接执行 aptss + /usr/bin/aptss "${@:2}" 2>&1 + exit_code=$? + fi + ;; + + *) + # 兜底:拒绝非法指令 + echo "拒绝执行:仅允许执行 'apm', 'aptss' 或 'ssinstall'。收到的参数: '$command_type'" + exit 1 + ;; +esac exit $exit_code \ No newline at end of file