anthropics / anthropics/claude-code

Windows: Bash tool permanently broken in long-lived sessions - inlined shell snapshot exceeds command-line length and is truncated

Abierto
#88,311 0 comentarios 0 reacciones 0 asignados Ver en GitHub
area:bash bug has repro platform:vscode platform:windows
Lenguaje dominante
Python
Estrellas
145k
Forks
23.1k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

# Bug report — para /bug o github.com/anthropics/claude-code/issues

**Title:** Windows: Bash tool permanently broken in long-lived sessions — inlined shell snapshot + wrapper exceeds command-line length and is truncated (every command fails with "unexpected EOF")

**Environment:** Claude Code 2.1.233 (VS Code extension), Windows 11 Home 10.0.26200, Git Bash (msys), ~17 plugins enabled, session resumed multiple times over several days.

**Symptom:** Every Bash tool call fails, including `true` and `pwd`. Errors rotate between:

```
/usr/bin/bash: -c: line 67: unexpected EOF while looking for matching `''
/usr/bin/bash: line 67: /dev/n: No such file or directory
/usr/bin/bash: line 67: p: command not found
```

The visible fragment shows the harness wrapper truncated mid-token (e.g. `eval 'git status' < /dev/null && pwd -P >| '` — the cwd-file path is cut off). The cut point moves 1:1 with the length of the user command, indicating a fixed total-length cap on the composed `bash -c` string.

**Root cause (diagnosed):**
1. The Bash tool composes ONE `bash -c ""` that INLINES the shell snapshot (~45 lines; on this machine the `export PATH` line alone is ~4.5KB due to duplicated Windows PATH blocks + one `bin` dir per enabled plugin) plus the harness prologue/epilogue. Error line numbers (64-71) match snapshot lines + wrapper lines.
2. When the environment grows (plugins loaded at resume, duplicated PATH), the composed string crosses a Windows command-line length limit and is silently truncated → unparseable script → every call fails.
3. The composed wrapper appears to be CACHED per conversation: editing/shrinking the files in `~/.claude/shell-snapshots/` mid-session has no effect (error stays at the same line even after replacing the active snapshot with a 3-line file). Only a brand-new conversation regenerates it.
4. Subagents spawned by the broken session inherit the same broken wrapper; retries never help (deterministic).

**Repro sketch:** Windows + many plugins + duplicated PATH (launch VS Code from an already-extended shell) → long-lived conversation with several resumes → Bash calls degrade from "long commands fail" to "everything fails".

**Suggested fix:** write the composed script to a temp file and execute `bash ` (or source the snapshot by path) instead of inlining everything into `-c` — removes the length ceiling entirely. Related: #55671 (command line too long on Windows), #31437 (snapshot inlining overhead).

**Impact:** total loss of shell for the session (file tools keep working); user-visible as "Claude can't run any command anymore".

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Start at the Bash tool entry point that constructs the Windows `bash -c` wrapper, and inspect the files under `~/.claude/shell-snapshots/` involved in the cached snapshot. Reproduce with a long PATH and multiple plugins, then verify that executing the composed script from a temporary file avoids truncation and that short commands such as `true` and `pwd` succeed in a resumed session.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
bash, python
Área
cli, operating-systems
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Activo
Claridad
Bastante claro
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.