`for await (const c of process.stdin)` does not accept EOF in Windows
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
Version
v24.13.0
Platform
Microsoft Windows NT 10.0.26200.0 x64
Subsystem
No response
What steps will reproduce the bug?
- Run
node -e "for await (const c of process.stdin) console.log(c)" - [f] [o] [o] [Enter]
- [Ctrl] + [Z] or [Ctrl] + [D] (= EOF)
- [Enter]
How often does it reproduce? Is there a required condition?
Always
What is the expected behavior? Why is that the expected behavior?
In Ubuntu and Alma Node successfully stop reading by Ctrl + D:
$ node -e "for await (const c of process.stdin) console.log(c)"
foo
<Buffer 66 6f 6f 0a>
What do you see instead?
Node will never stop reading in spite of [Ctrl] + [Z] or [Ctrl] + [D]:
PS> node -e "for await (const c of process.stdin) console.log(c)"
foo
<Buffer 66 6f 6f 0d 0a>
^Z
<Buffer 1a 0d 0a>
^D
<Buffer 04 0d 0a>
I had to end up with killing the process by Ctrl + C.
Additional information
I usually use Proto to manage Node versions, but it was able to be reproduced in the portable version in the official zipball:
PS> .\Downloads\node-v24.13.0-win-x64\node -e "for await (const c of process.stdin) console.log(c)"
foo
<Buffer 66 6f 6f 0d 0a>
^Z
<Buffer 1a 0d 0a>
^D
<Buffer 04 0d 0a>
PS> echo $?
False
(ended up with Ctrl + C)
Workaround: insert if ((c[0] === 4 || c[0] === 0x1a) && c.length === 1 + EOL.length && c.toString("latin1", c.length - EOL.length) === EOL) break; (import { EOL } from "node:os")
If this bug did not exist, you would be able to retrieve the entire multiline text from stdin by (await Array.fromAsync(process.stdin)).join("") in all platforms.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza reproduciendo el problema en Windows con el comando indicado node -e "for await (const c of process.stdin) ..." y sigue el punto de entrada de la iteración asíncrona de process.stdin. Se considera terminado cuando Ctrl+Z o Ctrl+D se reconoce como EOF, el bucle termina y el comportamiento queda cubierto por una prueba de regresión de Windows.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, node.js
- Área
- cli, operating-systems
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100