#!/usr/bin/env bash set -Eeuo pipefail BASE_URL='https://sh.decoffee.top' INSTALL_DIR="${DECOFFEE_INSTALL_DIR:-$HOME/.local/lib/decoffee}" BIN_DIR="${DECOFFEE_BIN_DIR:-$HOME/.local/bin}" TMP_DIR="$(mktemp -d)" cleanup() { rm -rf -- "$TMP_DIR" } trap cleanup EXIT for dependency in curl python3 bash install ln; do if ! command -v "$dependency" >/dev/null 2>&1; then echo "缺少依赖:$dependency" >&2 exit 1 fi done curl -fsSL --retry 3 --connect-timeout 10 \ "$BASE_URL/decoffee.sh" -o "$TMP_DIR/decoffee.sh" curl -fsSL --retry 3 --connect-timeout 10 \ "$BASE_URL/decoffee_api.py" -o "$TMP_DIR/decoffee_api.py" head -n 1 "$TMP_DIR/decoffee.sh" | grep -q '^#!/usr/bin/env bash' || { echo "decoffee.sh 内容校验失败" >&2 exit 1 } head -n 1 "$TMP_DIR/decoffee_api.py" | grep -q '^#!/usr/bin/env python3' || { echo "decoffee_api.py 内容校验失败" >&2 exit 1 } bash -n "$TMP_DIR/decoffee.sh" python3 -m py_compile "$TMP_DIR/decoffee_api.py" mkdir -p "$INSTALL_DIR" "$BIN_DIR" install -m 0755 "$TMP_DIR/decoffee.sh" "$INSTALL_DIR/decoffee.sh" install -m 0644 "$TMP_DIR/decoffee_api.py" "$INSTALL_DIR/decoffee_api.py" if [ -e "$BIN_DIR/decoffee" ] && [ ! -L "$BIN_DIR/decoffee" ]; then echo "拒绝覆盖已有文件:$BIN_DIR/decoffee" >&2 echo "请删除或移动该文件后重试。" >&2 exit 1 fi ln -sfn "$INSTALL_DIR/decoffee.sh" "$BIN_DIR/decoffee" if [[ ":$PATH:" != *":$BIN_DIR:"* ]]; then echo "提示:可将 $BIN_DIR 加入 PATH,之后直接运行 decoffee。" fi cleanup trap - EXIT exec "$INSTALL_DIR/decoffee.sh" "$@"