news 2026/8/20 11:02:30

告别繁琐运维!Codex 一键安装脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别繁琐运维!Codex 一键安装脚本

使用 Codex CLI 提升服务器运维效率

在服务器运维工作中,日志查看、部署操作和问题排查等任务往往比较繁琐。Codex CLI 作为一款命令行工具,能够显著简化这些流程,提升工作效率。本文将介绍如何通过自动化脚本在多台服务器上快速安装和配置 Codex CLI。

脚本效果展示

我编写了一个自动化安装脚本,下面是执行效果示例:

脚本主要功能

一、三种安装方式

脚本支持三种安装方式:

  1. 直接安装:从官方源直接下载安装
  2. Node.js/npm 安装:通过 npm 包管理器安装
  3. Snap Store 安装:通过 Snap 包管理器安装

二、卸载功能

脚本提供完整的卸载功能,可以清理不同安装方式下的 Codex 文件,同时保留用户配置和会话数据。

三、API Key 配置

安装完成后自动配置 API Key,方便快速开始使用。

安装与使用

安装步骤

# 添加执行权限 chmod +x install_codex.sh 运行安装脚本 ./install_codex.sh

基本使用命令

# 正常启动 Codex codex 恢复上次对话 codex resume 以超级权限启动(谨慎使用) codex --yolo

完整脚本代码

将以下代码保存为install_codex.sh:(运行不起来的,请下载脚本文件)
codex教程与脚本下载请点击

#!/bin/bash set -o pipefail ================= 配置区域 ================= 请在此处填写您的配置信息 您的 OpenAI API Key(从官方平台获取) API_KEY="请在此处填写您的 API Key" 官方 API 地址(使用 OpenAI 官方地址) BASE_URL="https://api.openai.com/v1" =========================================== echo ">>> 开始执行 Codex CLI 自动化配置脚本..." INSTALL_SCRIPT_URL="https://chatgpt.com/codex/install.sh" NETWORK_TEST_URL="https://example.com/" CURL_CONNECT_TIMEOUT=30 CURL_MAX_TIME=60 INSTALL_DEBUG="${INSTALL_DEBUG:-0}" INSTALL_PROGRESS="${INSTALL_PROGRESS:-1}" test_network_access() { local test_name="$1" local test_url="$2" local test_result local test_exit_code echo ">>> 正在测试${test_name}..." test_result=$(curl -fsSL --connect-timeout "$CURL_CONNECT_TIMEOUT" --max-time "$CURL_MAX_TIME" --output /dev/null --write-out 'HTTP=%{http_code}; remote_ip=%{remote_ip}; dns=%{time_namelookup}s; connect=%{time_connect}s; tls=%{time_appconnect}s; total=%{time_total}s' "$test_url") test_exit_code=$? if [[ $test_exit_code -ne 0 ]]; then echo ">>> 网络连接异常:${test_name}失败。" echo ">>> 检测结果:${test_result:-HTTP=000}; curl_exit=${test_exit_code}" return 1 fi echo ">>> ${test_name}成功:${test_result}" } enable_install_progress() { local curl_bin [[ "$INSTALL_PROGRESS" == "1" ]] || return 0 curl_bin=$(command -v curl) || return 1 INSTALL_PROGRESS_DIR=$(mktemp -d) || return 1 INSTALL_ORIGINAL_PATH="$PATH" cat > "$INSTALL_PROGRESS_DIR/curl" << EOF #!/bin/sh exec "$curl_bin" "$@" --progress-bar EOF chmod +x "$INSTALL_PROGRESS_DIR/curl" export PATH="$INSTALL_PROGRESS_DIR:$PATH" echo ">>> 已启用下载进度显示。" } disable_install_progress() { if [[ -n "${INSTALL_ORIGINAL_PATH:-}" ]]; then export PATH="$INSTALL_ORIGINAL_PATH" fi if [[ -n "${INSTALL_PROGRESS_DIR:-}" ]]; then rm -rf "$INSTALL_PROGRESS_DIR" fi } install_official() { local -a curl_args=(-fsSL --connect-timeout "$CURL_CONNECT_TIMEOUT" --max-time "$CURL_MAX_TIME") local install_script_file local install_exit_code if ! test_network_access "网络连接测试" "$NETWORK_TEST_URL"; then echo ">>> 请检查网络连接。" return 1 fi if ! test_network_access "安装地址访问测试" "$INSTALL_SCRIPT_URL"; then echo ">>> 无法访问安装地址,请检查网络。" return 1 fi install_script_file=$(mktemp) || return 1 if ! curl "${curl_args[@]}" --output "$install_script_file" "$INSTALL_SCRIPT_URL"; then rm -f "$install_script_file" return 1 fi if [[ "$INSTALL_DEBUG" == "1" ]]; then echo ">>> 已启用安装诊断模式,将显示官方安装脚本执行的下载命令。" fi if ! enable_install_progress; then echo ">>> 警告:无法启用下载进度显示,将继续安装。" fi echo ">>> 正在执行官方安装器,下载和安装阶段将显示进度..." echo ">>> 安装完成后将由本脚本写入 API Key,不立即启动 Codex。" if [[ "$INSTALL_DEBUG" == "1" ]]; then printf 'n\n' | sh -x "$install_script_file" else printf 'n\n' | sh "$install_script_file" fi install_exit_code=$? disable_install_progress rm -f "$install_script_file" return "$install_exit_code" } install_with_node() { if ! command -v npm &> /dev/null; then echo ">>> 未检测到 npm,尝试安装 nodejs/npm..." if command -v apt-get &> /dev/null; then apt-get update && apt-get install -y nodejs npm elif command -v yum &> /dev/null; then yum install -y nodejs npm elif command -v dnf &> /dev/null; then dnf install -y nodejs npm else echo ">>> 错误:未检测到 npm,且无法自动识别包管理器,请先手动安装 Node.js/npm。" return 1 fi fi if ! command -v npm &> /dev/null; then echo ">>> 错误:npm 安装失败,请先手动安装 Node.js" return 1 fi echo ">>> 正在使用 npm 安装 Codex..." npm install -g @openai/codex } install_with_snap() { if ! command -v snap &> /dev/null; then echo ">>> 错误:未检测到 snap,请先安装 snapd。" return 1 fi echo ">>> 正在通过 Snap Store 安装 Codex..." snap install codex } ensure_codex_on_path() { local codex_dir hash -r 2>/dev/null || true for codex_dir in "$HOME/.local/bin" /usr/local/bin /snap/bin; do if [[ -x "$codex_dir/codex" ]]; then PATH="$codex_dir:$PATH" export PATH return 0 fi done command -v codex &> /dev/null } remove_codex() { local removed_anything=0 read -r -p ">>> 将卸载 Snap/npm/官方安装器中的 Codex,但保留 ~/.codex 配置与会话。确认删除?[y/N] " confirm_remove case "$confirm_remove" in y|Y|yes|YES) ;; *) echo ">>> 已取消删除。" return 0 ;; esac if command -v snap &> /dev/null && snap list codex &> /dev/null; then echo ">>> 正在卸载 Snap Codex..." snap remove codex || return 1 removed_anything=1 fi if command -v npm &> /dev/null && npm ls -g --depth=0 @openai/codex &> /dev/null; then echo ">>> 正在卸载 npm Codex..." npm uninstall -g @openai/codex || return 1 removed_anything=1 fi if [[ -e "$HOME/.local/bin/codex" ]]; then echo ">>> 正在删除官方安装器的 Codex 命令..." rm -f "$HOME/.local/bin/codex" removed_anything=1 fi if [[ -d "$HOME/.codex/packages/standalone" ]]; then echo ">>> 正在删除官方安装器的 standalone 安装包..." rm -rf "$HOME/.codex/packages/standalone" removed_anything=1 fi if [[ -f "$HOME/.bashrc" ]] && grep -qxF 'export PATH="$HOME/.local/bin:$PATH"' "$HOME/.bashrc"; then echo ">>> 正在清理 .bashrc 中的官方 Codex PATH 配置..." sed -i '|^export PATH="$HOME/.local/bin:$PATH"$|d' "$HOME/.bashrc" removed_anything=1 fi hash -r if [[ $removed_anything -eq 0 ]]; then echo ">>> 未发现可删除的 Codex 安装。" else echo ">>> Codex 已删除;已保留 ~/.codex 配置与会话。" fi } configure_codex() { echo ">>> 开始配置 API Key 与 Base URL..." mkdir -p ~/.codex cat > ~/.codex/config.toml << EOF model_provider = "openai" model = "gpt-4" model_reasoning_effort = "medium" disable_response_storage = false [model_providers.openai] name = "openai" base_url = "${BASE_URL}" wire_api = "responses" requires_openai_auth = true EOF echo ">>> config.toml 配置文件已写入。" echo "${API_KEY}" | codex login --with-api-key echo ">>> 正在验证登录状态..." codex login status } install_selected_source() { local selected="$1" local install_status=0 case "$selected" in 1) install_official || install_status=$? ;; 2) install_with_node || install_status=$? ;; 3) install_with_snap || install_status=$? ;; *) echo ">>> 错误:无效安装选项。"; return 1 ;; esac ensure_codex_on_path || return "$install_status" return "$install_status" } choose_install_source() { echo " 1. 直接安装 Codex" echo " 2. 使用 Node.js/npm 安装 Codex" echo " 3. 使用 Snap Store 安装 Codex" read -r -p ">>> 请输入安装方式 [1-3]:" selected_source install_selected_source "$selected_source" } 安装或更新认证配置 if ensure_codex_on_path; then echo ">>> 检测到 Codex CLI 已安装。" echo " 1. 重新填写 API Key 与 Base URL" echo " 2. 删除 Codex" echo " 3. 切换 Codex 安装方式" echo " 4. 退出" read -r -p ">>> 请输入选项 [1-4]:" installed_mode case "$installed_mode" in if ! configure_codex; then echo ">>> 错误:API Key 或 Base URL 配置失败。" exit 1 fi ;; 2) remove_codex exit $? ;; 3) echo ">>> 切换安装方式前将删除现有 Snap/npm/官方安装文件,保留 ~/.codex 配置。" remove_codex || exit $? if ! ensure_codex_on_path; then choose_install_source || exit $? ensure_codex_on_path || exit 1 configure_codex || exit 1 fi ;; *) echo ">>> 保留现有 Codex 与配置,脚本结束。" ;; esac else echo ">>> 未检测到 Codex CLI,请选择安装方式:" choose_install_source install_command_exit_code=$? if [[ $install_command_exit_code -ne 0 ]]; then exit "$install_command_exit_code"; fi if ! ensure_codex_on_path; then echo ">>> 错误:Codex CLI 安装失败,请检查网络或手动排查。" exit 1 fi if [[ $install_command_exit_code -ne 0 ]]; then echo ">>> 警告:安装器返回了非零状态,但 Codex CLI 已成功安装,将继续配置。" fi echo ">>> Codex CLI 安装成功!" if ! configure_codex; then echo ">>> 错误:API Key 或 Base URL 配置失败。" exit 1 fi fi echo ">>> 脚本执行完毕!你可以直接运行 'codex' 开始使用。" if [[ -x "$HOME/.local/bin/codex" && "$PATH" != "$HOME/.local/bin" ]]; then echo ">>> 当前终端请先执行:export PATH="$HOME/.local/bin:$PATH" && hash
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 11:02:02

如何用网盘直链下载助手 3 步搞定全平台下载:LinkSwift 完整上手指南

如何用网盘直链下载助手 3 步搞定全平台下载:LinkSwift 完整上手指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移…

作者头像 李华
网站建设 2026/8/20 10:57:40

DETR目标检测:Transformer端到端集合预测原理与实战

如果你在2020年之前接触过目标检测,那么你一定对“两阶段”和“一阶段”这两个词印象深刻。从R-CNN系列到YOLO系列,整个领域似乎都在这两条技术路径上做“选择题”:是先找候选框再分类,还是直接回归出框和类别?无论怎么…

作者头像 李华
网站建设 2026/8/20 10:57:19

论文精读:非平稳空间过程下空间预测的不确定性量化 GeoSIMCP

论文精读:非平稳空间过程下空间预测的不确定性量化 GeoSIMCP 论文:Quantifying Uncertainty in Spatial Prediction for Nonstationary Spatial Processes 期刊:Annals of the American Association of Geographers 作者:Peng Luo(MIT Senseable City Lab) 开源:geoconf…

作者头像 李华
网站建设 2026/8/20 10:54:54

网盘下载限速怎么办?网盘直链下载助手完整上手指南

网盘下载限速怎么办?网盘直链下载助手完整上手指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…

作者头像 李华
网站建设 2026/8/20 10:54:13

小公司做AEO优化投入产出比很低实践复盘:有效做法与真实教训

小公司AEO低ROI的根源并非技术无效,而是缺乏数据隔离与精准归因导致资源空耗。 本文从安全架构视角复盘,指出通过轻量化点数计费与多模型独立诊断机制,可将模糊的“玄学优化”转化为可验证、可熔断的工程闭环,从而在有限预算下实现…

作者头像 李华