Fix curl|bash manage.sh: reattach /dev/tty; add update subcommand.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-18 08:32:08 +08:00
parent 8c4afe7781
commit 27d14472ea
3 changed files with 74 additions and 2 deletions
+5
View File
@@ -22,6 +22,11 @@ MT5 **黄金** 下单辅助中控:**网页登录 → 下载通用 exe → 首
# 新服务器(推荐)
curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash
# 已安装后仅快速更新(非交互):
curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash -s -- update
# 或:
bash /opt/gold_monitor/deploy/manage.sh update
# 或手动
cd /opt
git clone https://git.bz121.com/dekun/gold_monitor.git gold_monitor
+61 -2
View File
@@ -4,9 +4,13 @@
# 新服务器(免克隆):
# curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash
#
# 已安装:
# 已安装(推荐,可交互):
# bash /opt/gold_monitor/deploy/manage.sh
#
# 非交互快速更新:
# bash /opt/gold_monitor/deploy/manage.sh update
# curl -fsSL .../deploy/manage.sh | bash -s -- update
#
set -e
if [ -n "${BASH_VERSION:-}" ]; then
set -o pipefail
@@ -22,6 +26,7 @@ if [[ -n "${_script_src}" && -f "${_script_src}" ]]; then
REPO_ROOT="$(cd "${DEPLOY_DIR}/.." && pwd)"
LIB_DIR="${DEPLOY_DIR}/lib"
else
# curl | bash 时脚本从 stdin 执行,无本地路径
DEPLOY_DIR=""
REPO_ROOT=""
LIB_DIR=""
@@ -80,6 +85,38 @@ bootstrap_repo() {
exec bash "${INSTALL_ROOT}/deploy/manage.sh" "$@" </dev/tty
}
# curl|bash 时 stdin 是脚本管道,菜单 read 会立刻失败;改挂到真实终端
ensure_interactive_tty() {
if [[ -t 0 ]]; then
return 0
fi
local local_mgr="${INSTALL_ROOT}/deploy/manage.sh"
if [[ -n "${REPO_ROOT}" && -f "${REPO_ROOT}/deploy/manage.sh" ]]; then
local_mgr="${REPO_ROOT}/deploy/manage.sh"
fi
if [[ -r /dev/tty && -f "${local_mgr}" ]]; then
echo "检测到非交互 stdin(多为 curl|bash),改从终端重新启动管理器…"
exec bash "${local_mgr}" "$@" </dev/tty
fi
echo "错误: 需要交互终端才能显示菜单。" >&2
echo "请改用下列任一方式:" >&2
echo " bash ${INSTALL_ROOT}/deploy/manage.sh" >&2
echo " bash ${INSTALL_ROOT}/deploy/manage.sh update" >&2
echo " curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash -s -- update" >&2
exit 1
}
run_update_quick() {
export REPO_ROOT DEPLOY_DIR LIB_DIR INSTALL_ROOT GIT_URL GIT_BRANCH
# shellcheck source=/dev/null
source "${LIB_DIR}/common.sh"
need_root
echo "快速更新: git pull + pm2 restart"
git -C "${REPO_ROOT}" pull --ff-only
pm2 restart gold_monitor
echo "更新完成"
}
show_banner() {
local ip path
path="${INSTALL_ROOT}"
@@ -111,8 +148,30 @@ show_menu() {
}
main_menu() {
bootstrap_repo
bootstrap_repo "$@"
export REPO_ROOT DEPLOY_DIR LIB_DIR INSTALL_ROOT GIT_URL GIT_BRANCH
local cmd="${1:-}"
case "${cmd}" in
update|3)
# shellcheck source=/dev/null
source "${LIB_DIR}/common.sh"
run_update_quick
exit 0
;;
update-deps)
# shellcheck source=/dev/null
source "${LIB_DIR}/common.sh"
need_root
git -C "${REPO_ROOT}" pull --ff-only
bash "${REPO_ROOT}/deploy/setup_env.sh"
pm2 restart gold_monitor
echo "依赖更新完成"
exit 0
;;
esac
ensure_interactive_tty "$@"
# shellcheck source=/dev/null
source "${LIB_DIR}/common.sh"
show_banner
+8
View File
@@ -14,6 +14,14 @@
```bash
curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash
已安装后若只要更新,用非交互命令(`curl|bash` 直接进菜单会因 stdin 被占用而失败):
```bash
curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash -s -- update
# 或本机:
bash /opt/gold_monitor/deploy/manage.sh update
```
```
菜单: