feat: support direct pipe execution via curl/wget and auto-bootstrap

This commit is contained in:
jocay
2026-09-27 13:14:33 +08:00
parent 34565faa6b
commit 0d7dc2289c
2 changed files with 70 additions and 3 deletions
+11 -3
View File
@@ -35,17 +35,25 @@ sb-core/
## 🚀 快速使用 ## 🚀 快速使用
### 1. 部署与运行 ### 1. 一键脚本命令(推荐)
在 Linux VPS(Ubuntu / Debian / CentOS / Rocky 等)以 `root` 权限执行: 在 Linux VPS(Ubuntu / Debian / CentOS / Rocky / Alpine 等)以 `root` 权限直接执行以下任一命令:
```bash
bash <(curl -Ls https://git.draws.qzz.io/jocay/singbox-script/raw/branch/main/sb.sh)
```
或者:
```bash
bash <(wget -qO- https://git.draws.qzz.io/jocay/singbox-script/raw/branch/main/sb.sh)
```
**或者通过 Git Clone 手动部署:**
```bash ```bash
git clone https://git.draws.qzz.io/jocay/singbox-script.git git clone https://git.draws.qzz.io/jocay/singbox-script.git
cd singbox-script cd singbox-script
chmod +x sb.sh lib/*.sh chmod +x sb.sh lib/*.sh
./sb.sh ./sb.sh
``` ```
首次运行后会自动建立全局快捷指令,之后在系统任意目录输入 `sb` 即可调出菜单。 首次运行后会自动建立全局快捷指令,之后在系统任意目录输入 `sb` 即可调出菜单。
### 2. 交互式菜单功能 ### 2. 交互式菜单功能
+59
View File
@@ -8,6 +8,64 @@
set -eo pipefail set -eo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BOOTSTRAP_DIR="/usr/local/share/singbox-script"
TAR_URL="https://git.draws.qzz.io/jocay/singbox-script/archive/main.tar.gz"
GIT_URL="https://git.draws.qzz.io/jocay/singbox-script.git"
# 检测是否通过网络管道 (curl | bash 或 wget | bash) 远程单行执行
if [[ ! -d "${SCRIPT_DIR}/lib" ]]; then
if [[ $EUID -ne 0 ]]; then
echo -e "\033[31m[ERROR]\033[0m 本脚本需要 root 权限,请使用 sudo 或切换至 root 用户执行!" >&2
exit 1
fi
echo -e "\033[36m[INFO]\033[0m 检测到通过网络管道一键运行,正在自动化拉取完整组件至 ${BOOTSTRAP_DIR}..."
# 确保基础下载与解压依赖
if ! command -v tar >/dev/null 2>&1 || (! command -v curl >/dev/null 2>&1 && ! command -v wget >/dev/null 2>&1); then
if command -v apt-get >/dev/null 2>&1; then
apt-get update -y >/dev/null 2>&1 && apt-get install -y curl tar ca-certificates >/dev/null 2>&1
elif command -v dnf >/dev/null 2>&1; then
dnf install -y curl tar ca-certificates >/dev/null 2>&1
elif command -v yum >/dev/null 2>&1; then
yum install -y curl tar ca-certificates >/dev/null 2>&1
elif command -v apk >/dev/null 2>&1; then
apk update >/dev/null 2>&1 && apk add --no-cache curl tar ca-certificates >/dev/null 2>&1
fi
fi
rm -rf "${BOOTSTRAP_DIR}"
mkdir -p "${BOOTSTRAP_DIR}"
temp_archive="/tmp/singbox-script-$$.tar.gz"
download_success=false
if command -v curl >/dev/null 2>&1; then
if curl -sSL --fail --connect-timeout 10 -o "$temp_archive" "$TAR_URL"; then
download_success=true
fi
elif command -v wget >/dev/null 2>&1; then
if wget -qO "$temp_archive" "$TAR_URL"; then
download_success=true
fi
fi
if [[ "$download_success" == "true" ]]; then
tar -xzf "$temp_archive" -C "${BOOTSTRAP_DIR}" --strip-components=1 2>/dev/null || tar -xzf "$temp_archive" -C "${BOOTSTRAP_DIR}"
rm -f "$temp_archive"
elif command -v git >/dev/null 2>&1; then
rm -rf "${BOOTSTRAP_DIR}"
git clone --depth=1 "$GIT_URL" "${BOOTSTRAP_DIR}" >/dev/null 2>&1
else
echo -e "\033[31m[ERROR]\033[0m 下载失败,请检查网络或确认仓库地址有效: ${TAR_URL}" >&2
exit 1
fi
chmod +x "${BOOTSTRAP_DIR}/sb.sh" "${BOOTSTRAP_DIR}/lib/"*.sh 2>/dev/null || true
ln -sf "${BOOTSTRAP_DIR}/sb.sh" /usr/local/bin/sb
chmod +x /usr/local/bin/sb
exec bash "${BOOTSTRAP_DIR}/sb.sh" "$@"
fi
# 加载各核心子模块 # 加载各核心子模块
source "${SCRIPT_DIR}/lib/env.sh" source "${SCRIPT_DIR}/lib/env.sh"
@@ -217,6 +275,7 @@ do_uninstall() {
# 仅清理程序自身目录,杜绝误伤 # 仅清理程序自身目录,杜绝误伤
rm -rf "${INSTALL_DIR}" rm -rf "${INSTALL_DIR}"
rm -rf "${BOOTSTRAP_DIR}"
rm -f "${BIN_PATH}" "${SCRIPT_LINK}" rm -f "${BIN_PATH}" "${SCRIPT_LINK}"
log_success "Sing-box 核心服务已完全且干净地卸载!" log_success "Sing-box 核心服务已完全且干净地卸载!"