一键脚本
下面的脚本会同时完成两件事:写入终端代理环境变量,并生成一个带固定 Chromium 代理参数的 Codex Proxy.app。
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
| #!/bin/zsh
set -eu
PROXY_PORT="7890" # Clash Verge 本地代理端口
SHELL_RC="$HOME/.zshrc" # macOS 默认是 zsh;若仍使用 bash,改为 ~/.bashrc 或 ~/.bash_profile
CODEX_APP="/Applications/Codex.app" # Codex.app 的实际安装路径
APP_NAME="Codex Proxy" # 打包后显示的应用名称
LAUNCHER_SCRIPT="$HOME/Desktop/codex-proxy-launcher.applescript" # 原始启动器脚本
APP_PATH="/Applications/${APP_NAME}.app"
BLOCK_START="# >>> codex proxy >>>"
BLOCK_END="# <<< codex proxy <<<"
TMP_FILE="$(mktemp)"
touch "$SHELL_RC"
awk -v start="$BLOCK_START" -v end="$BLOCK_END" '
$0 == start {skip=1; next}
$0 == end {skip=0; next}
!skip {print}
' "$SHELL_RC" > "$TMP_FILE"
mv "$TMP_FILE" "$SHELL_RC"
cat >> "$SHELL_RC" <<EOF
$BLOCK_START
export HTTP_PROXY="http://127.0.0.1:${PROXY_PORT}"
export HTTPS_PROXY="http://127.0.0.1:${PROXY_PORT}"
export ALL_PROXY="socks5://127.0.0.1:${PROXY_PORT}"
export NO_PROXY="localhost,127.0.0.1,::1"
$BLOCK_END
EOF
cat > "$LAUNCHER_SCRIPT" <<EOF
on run
do shell script "open -na " & quoted form of "$CODEX_APP" & " --args --proxy-server=" & quoted form of "http://127.0.0.1:${PROXY_PORT}" & " --proxy-bypass-list=" & quoted form of "localhost;127.0.0.1;[::1]"
end run
EOF
osacompile -o "$APP_PATH" "$LAUNCHER_SCRIPT"
echo "已写入 $SHELL_RC"
echo "已生成 $LAUNCHER_SCRIPT"
echo "已编译 $APP_PATH"
echo "如需让当前终端立即读取新配置,可执行: source $SHELL_RC"
|
前提
macOS 默认 shell 为 zsh。是否安装 Oh My Zsh 不影响本文命令,配置文件仍然是 ~/.zshrc。只有仍在使用 bash 时,才需要将脚本中的 SHELL_RC 改为 ~/.bashrc 或 ~/.bash_profile。
执行脚本前,先确认 Clash 已启动,且目标端口处于监听状态:
1
| lsof -nP -iTCP:7890 -sTCP:LISTEN
|
如果端口不是 7890,直接修改脚本顶部的 PROXY_PORT 即可。
变量说明
PROXY_PORT 用于统一控制终端环境变量和桌面版 Codex 的代理端口。
SHELL_RC 指向 shell 配置文件。使用 zsh 时为 ~/.zshrc,使用 bash 时改为 bash 对应文件。
APP_NAME 和 APP_PATH 控制打包后的应用名称。例如改成 Codex Clash 后,生成结果就会变成 /Applications/Codex Clash.app。
LAUNCHER_SCRIPT 是原始 AppleScript 文件。后续若只需要调整桌面启动参数,直接修改这个文件并重新编译即可。
脚本做了什么
脚本先在 SHELL_RC 中写入一段受标记保护的代理配置。再次执行时,会先移除旧的受管区块,再写入新的区块,避免重复追加。
随后会生成一个 AppleScript 启动器,并通过 osacompile 打包成 .app。这个启动器实际执行的仍然是:
1
2
3
| open -na "/Applications/Codex.app" --args \
--proxy-server="http://127.0.0.1:7890" \
--proxy-bypass-list="localhost;127.0.0.1;[::1]"
|
环境变量负责终端中的 Codex CLI,启动参数负责桌面版 Codex。系统代理和 TUN 模式可以保持关闭。
验证
若脚本刚执行完成,当前终端需要手动读取一次新配置:
终端代理可以通过以下命令检查:
1
2
| echo $HTTPS_PROXY
curl -I https://www.google.com
|
桌面版 Codex 启动后,可直接检查实际进程参数:
1
| ps axww -o pid=,command= | grep "/Applications/Codex.app/Contents/MacOS/Codex" | grep -- "--proxy-server"
|
如果看到类似下面的输出,说明代理参数已经传入实际运行进程:
1
| 27415 /Applications/Codex.app/Contents/MacOS/Codex --proxy-server=http://127.0.0.1:7890 --proxy-bypass-list=localhost;127.0.0.1;[::1]
|
后续调整
代理端口变更时,直接修改脚本开头的 PROXY_PORT,然后重新执行整段脚本即可。这样会同时更新 SHELL_RC 和桌面启动器。
如果只需要更换打包后的应用名称,修改 APP_NAME 后重新执行即可。
如果只需要重建桌面启动器,也可以单独重新编译:
1
2
| APP_NAME="Codex Proxy"
osacompile -o "/Applications/${APP_NAME}.app" "$HOME/Desktop/codex-proxy-launcher.applescript"
|
.app 本身只是打包产物,不需要在包内部单独维护配置。当前打包结果仍使用默认 applet 图标,本文仅覆盖功能性封装。