-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathbuild.sh
More file actions
60 lines (52 loc) · 1.5 KB
/
build.sh
File metadata and controls
60 lines (52 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/env bash
# build.sh — 将 src/ 拼接成单文件 cac
set -euo pipefail
PROJ_DIR="$(cd "$(dirname "$0")" && pwd)"
SRC_DIR="$PROJ_DIR/src"
OUT="$PROJ_DIR/cac"
# 拼接顺序
SOURCES=(
utils.sh
dns_block.sh
mtls.sh
templates.sh
cmd_setup.sh
cmd_env.sh
cmd_relay.sh
cmd_check.sh
cmd_stop.sh
cmd_claude.sh
cmd_self.sh
cmd_docker.sh
cmd_delete.sh
cmd_version.sh
cmd_help.sh
main.sh
)
{
echo '#!/usr/bin/env bash'
echo '# cac — Claude Anti-fingerprint Cloak'
echo '# 由 build.sh 从 src/ 构建,勿直接编辑本文件'
echo 'set -euo pipefail'
echo
echo 'CAC_DIR="$HOME/.cac"'
echo 'ENVS_DIR="$CAC_DIR/envs"'
echo 'VERSIONS_DIR="$CAC_DIR/versions"'
echo
for file in "${SOURCES[@]}"; do
src="$SRC_DIR/$file"
if [[ ! -f "$src" ]]; then
echo "错误:找不到 $src" >&2; exit 1
fi
# 仅跳过源文件自身首行 shebang(保留 heredoc 内的 shebang)
echo "# ━━━ $file ━━━"
awk 'NR==1 && /^#!\// {next} {print}' "$src"
echo
done
} > "$OUT"
chmod +x "$OUT"
cp src/fingerprint-hook.js fingerprint-hook.js 2>/dev/null || true
cp src/relay.js relay.js 2>/dev/null || true
# Extract dns-guard.js from heredoc in dns_block.sh
sed -n '/^DNSGUARD_EOF$/q;p' "$SRC_DIR/dns_block.sh" | sed -n '/cat > "\$guard_file" << .DNSGUARD_EOF/,$ { /cat > /d; p; }' > cac-dns-guard.js
echo "✓ 构建完成 → ${OUT} ($(wc -l < "${OUT}") 行)"