install.sh: `exec 9>&- 2>/dev/null` in `release_install_lock` silences every later warning

Chiusa Adatta ai principianti
#58,818 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
Meno di un'ora
Idoneità per principianti
82/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
bash, shell
Ambito
cli

Direzione di ricerca

Il bug si trova in release_install_lock in install.sh, dove exec 9>&- 2>/dev/null reindirizza stderr per il resto dello script. Esegui la riproduzione descritta nella issue (un codex gestito da npm fittizio nel PATH con CODEX_NON_INTERACTIVE=1) e verifica con bash -x che la funzione di lock sia il punto in cui stderr scompare. È completato quando l'avviso 'Leaving the existing npm-managed Codex installed' compare sia con bash sia con sh, senza modificare il modo in cui fd 9 viene chiuso.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug CLI

What happens

After release_install_lock runs, the rest of install.sh writes nothing to stderr. The cause is this line:

release_install_lock() {
  ...
  elif [ "$lock_kind" = "flock" ] || [ "$lock_kind" = "lockf" ]; then
    exec 9>&- 2>/dev/null || true

In bash, exec with redirections and no command applies all of them to the shell itself, so 2>/dev/null stays in
force for the rest of the script, not only for closing fd 9. Every warn after that point goes to /dev/null. The
same happens under sh (dash on Ubuntu), which the documented curl -fsSL https://chatgpt.com/codex/install.sh | sh
uses.

What a user misses

handle_conflicting_install runs after release_install_lock. With another Codex on the PATH (an npm copy) and the
uninstall question answered No (or CODEX_NON_INTERACTIVE=1), the user never sees:

WARNING: Leaving the existing npm-managed Codex installed. PATH order will determine which codex runs.

The "Failed to uninstall the existing … Codex" warning after a Yes would be hidden the same way.

How to reproduce (Ubuntu 24.04 in Docker, Codex 0.166.0, install.sh sha256
44ac252c1b9a68c02bdf0de8e1c6cbfde36fc1afa8684624962eae7d4c461e70)

docker run --rm -it ubuntu:24.04 bash
apt-get update && apt-get install -y curl ca-certificates
useradd -m tester && su - tester
mkdir -p ~/.npm-global/bin
printf '#!/usr/bin/env node\n' > ~/.npm-global/bin/codex && chmod +x ~/.npm-global/bin/codex
curl -fsSL https://chatgpt.com/codex/install.sh -o install.sh
CODEX_NON_INTERACTIVE=1 PATH="$HOME/.npm-global/bin:$HOME/.local/bin:$PATH" bash install.sh

The output shows "Detected existing npm-managed Codex at /home/tester/.npm-global/bin/codex" and "installed
successfully", but no "Leaving the existing npm-managed Codex installed" line. bash -x install.sh shows
release_install_lock running exec 9>&- 2>/dev/null, and nothing more traced after it.

Run as written above on a clean ubuntu:24.04 container on 2026-11-02 (the same sha256): exit 0, no "Leaving …" line.

A possible fix

Close the descriptor without touching stderr, for example exec 9>&- alone, or { exec 9>&-; } 2>/dev/null. Both
keep stderr working afterwards in bash (checked); exec 9>&- 2>/dev/null silences it in bash and in dash.

Lingua principale
Rust
Stelle
133k
Fork
21.1k
Merge medio
1m
PR unite (30g)
997

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di openai/codex

Tutte le issue di openai/codex

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.