Nodejs process.stdin.resume () no funciona en Cygwin

Intentando hacer un progtwig de tipo CLI, esperando la entrada del usuario. En Cygwin, el script acaba de salir. Solo esto en el script process.stdin.resume ()

Parece funcionar en una máquina virtual de Linux. Funciona en la línea de comandos de Windows también.

Estoy asumiendo cosas ‘terminales’ con respecto a Cygwin ..

El síntoma es que Cygwin process.stdin.on('data', cb); y process.stdin.on('end', cb); no se llama

He encontrado una solución para ello

Versiones

 > ver Microsoft Windows [Version 6.1.7601] $ uname -a CYGWIN_NT-6.1 localhost 1.7.28(0.271/5/3) 2014-02-04 16:01 x86_64 Cygwin $ node --version v0.8.14 

Tal vez funcione con un nodo más nuevo, no lo sé, necesito usar esta versión.

c: \ test \ myecho.js

 console.error("Starting up"); process.stdin.resume(); process.stdin.setEncoding('utf8'); console.error("Waiting for data"); var inputContents = ""; process.stdin.on('data', function (chunk) { process.stderr.write("."); inputContents += chunk.toString(); }); process.stdin.on('end', function () { console.error("\nGot the full thing :)"); console.log(inputContents); }); 

intentémoslo en Windows

 c:\test>echo hello | node myecho Starting up Waiting for data . Got hello c:\test>_ 

Probémoslo en Cygwin.

 /cygdrive/c/test$ echo hello | node myecho Starting up Waiting for data /cygdrive/c/test$ _ 

Vamos a intentarlo de nuevo “en Cygwin”

 /cygdrive/c/test$ cmd /c 'echo hello | node myecho' Starting up Waiting for data . Got the full thing :) hello /cygdrive/c/test$ _ 

Ok, ahora hazlo elegante!

 /cygdrive/c/test$ cmd /c 'echo hello | node myecho 2>NUL' hello /cygdrive/c/test$ cmd /c 'echo hello | node myecho' 2>/dev/null hello /cygdrive/c/test$ _ 

Lástima, la entrada no puede provenir de un descriptor de archivo Cygwin, pero como solución alternativa es posible escribirlo en un archivo y luego leerlo desde allí con el type por ejemplo.

Portabilidad

Si alguien quiere escribir una secuencia de comandos portátil que llame a una aplicación de nodo esperando una entrada estándar:

 #!/bin/bash SCRIPT_DIR='../path/to/scripts' # absolute paths would need a little more playing if [[ `uname -s` == CYGWIN* ]]; then cmd /c "type file1 | node ${SCRIPT_DIR//\//\\}\program.js ${BASHVAR}" | grep stuff >file2 else cat file1 | node ${SCRIPT_DIR}/program.js ${BASHVAR} | grep stuff >file2 fi 
    Intereting Posts