mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-04-26 09:20:18 +08:00
update:提权支持apm命令
This commit is contained in:
@@ -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
|
||||||
Reference in New Issue
Block a user