2

CLIタイプのプログラムを作成しようとしています-ユーザー入力を待っています。Cygwinでは、スクリプトは終了するだけです。スクリプトprocess.stdin.resume()でこれだけ

LinuxVMで動作するようです。Windowsコマンドラインでも動作します。

Cygwinに関する「ターミナル」のものを想定しています。

4

1 に答える 1

2

症状は、Cygwinが呼び出さprocess.stdin.on('data', cb);process.stdin.on('end', cb);ないことです。

私はそれに対する回避策を見つけました

バージョン

> 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

新しいノードで動作する可能性がありますが、わかりません。このバージョンを使用する必要があります。

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);
});

Windowsで試してみましょう

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

Cygwinで試してみましょう

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

「Cygwinで」もう一度試してみましょう

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

さて、それを派手にしましょう!

/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$ _

type残念ながら、Cygwin ファイル記述子から入力を取得することはできませんが、回避策として、たとえば、ファイルに書き込んでそこから読み取ることができます。

携帯性

標準入力を期待するノードアプリを呼び出す移植可能なスクリプトを書きたい場合:

#!/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
于 2014-02-07T23:56:29.290 に答える