update:提权支持apm命令

This commit is contained in:
2026-03-12 12:32:40 +08:00
parent b90b7afc28
commit c81871f00b

View File

@@ -1,78 +1,72 @@
#!/bin/bash #!/bin/bash
# 检查是否提供了至少一个参数 # 1. 检查是否提供了至少一个参数
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
echo "错误:未提供命令参数。用法: $0 [aptss|ssinstall] <子命令> [参数...]" echo "错误:未提供命令参数。"
echo "用法: $0 [apm|aptss|ssinstall] <子命令> [参数...]"
exit 1 exit 1
fi fi
# 获取第一个参数 # 2. 获取第一个参数作为主指令
first_arg="$1" command_type="$1"
# 根据第一个参数决定执行哪个命令 # 3. 根据指令类型分发逻辑
if [[ "$first_arg" == "ssinstall" ]]; then case "$command_type" in
# 执行 ssinstall 命令(跳过第一个参数) "apm")
/usr/bin/ssinstall "${@:2}" 2>&1 # 执行 apm 命令(跳过第一个参数)
exit_code=$? /usr/bin/apm "${@:2}" 2>&1
elif [[ "$first_arg" == "aptss" ]]; then exit_code=$?
# 检查是否为 remove 子命令(第二个参数) ;;
if [[ "$2" == "remove" ]]; then
# 获取要卸载的软件包名称(第三个参数及以后)
packages="${@:3}"
"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 if command -v garma &> /dev/null; then
# 使用 garma 询问确认 garma --question --title="$title" --text="$text" \
garma --question \ --ok-label="确认卸载" --cancel-label="取消" --width=400
--title="确认卸载" \ confirmed=$?
--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
elif command -v zenity &> /dev/null; then elif command -v zenity &> /dev/null; then
# 使用 zenity 询问确认 zenity --question --title="$title" --text="$text" \
zenity --question \ --ok-label="确认卸载" --cancel-label="取消" --width=400
--title="确认卸载" \ confirmed=$?
--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
else else
# 既没有 garma 也没有 zenity拒绝卸载
echo "错误:未找到 garma 或 zenity无法显示确认对话框。卸载操作已拒绝。" echo "错误:未找到 garma 或 zenity无法显示确认对话框。卸载操作已拒绝。"
exit 1 exit 1
fi fi
else # 根据确认结果执行
# 非 remove 命令,直接执行 if [[ $confirmed -eq 0 ]]; then
/usr/bin/aptss "${@:2}" 2>&1 /usr/bin/aptss "${@:2}" -y 2>&1
exit_code=$? exit_code=$?
fi else
else echo "操作已取消"
# 其他情况,拒绝执行 exit 0
echo "拒绝执行:仅允许执行 'aptss' 或 'ssinstall' 命令。收到的第一个参数: '$first_arg'" fi
exit 1 else
fi # 非 remove 命令,直接执行 aptss
/usr/bin/aptss "${@:2}" 2>&1
exit_code=$?
fi
;;
*)
# 兜底:拒绝非法指令
echo "拒绝执行:仅允许执行 'apm', 'aptss' 或 'ssinstall'。收到的参数: '$command_type'"
exit 1
;;
esac
exit $exit_code exit $exit_code