stdout 不是 tty。使用 bash 节点 + 磁带 + tap-spec

stdout is not a tty. Using bash for node + tape + tap-spec

正在看磁带 + 点击视频并尝试让它工作。
OS: Windows 7 Git Bash Shell

node main.js | ./node_modules/.bin/tap-spec

stdout 不是 tty。

main.js:

var test = require('tape');
var add = require('./add');

test('add: two numbers add correctly', function(t) {
var actual = add(1,2);
var expected = 3;
t.equal(actual, expected);
t.end();
});

add.js:

module.exports = function(a, b) {
return a + b;
};

winpty 节点 main.js | ./node_modules/.bin/tap-spec 没有解决问题。

诊断:

代码没有问题,我得到以下输出:(OS : ArchLinux)

  add: two numbers add correctly

    ✔ should be equal


  total:     1
  passing:   1
  duration:  14ms

可能是 Windows 7 Git Bash Shell

的问题

I read somewhere : sending output through a pipe is broken with Git Bash

要丢弃它 运行 以下命令:

node -p -e "Boolean(process.stdout.isTTY)"

要使其正常工作,您需要以下输出:true


解决方案(针对Windows):

$ node -p -e "Boolean(process.stdout.isTTY)"
false

使用 winpty tool,它创建一个隐藏的控制台并在它和 Cygwin/GitBashshell 模拟的 pty 之间编组 I/O :

$ winpty node -p -e "Boolean(process.stdout.isTTY)"
true

READ MORE : Node.js doesn't run as tty on windows / cygwin Issue#3006

我在控制台上遇到了同样的问题"stdout is not a tty"

这是因为控制台,在安装 Git 时有一个选项正在选择默认终端。再次安装 Git 并选择终端作为 Windows 控制台,然后就可以了。

node generateData.js > db.json 在 Visual Studio 代码的终端上运行:bash

补充一下我的情况,我遇到了类似的问题。使用 winpty 的两种解决方案都没有帮助,因此当 运行 脚本(在我的例子中来自 Git bash 时,我使用了不同的提示来使用 node.exe 而不是 node ).

不工作:

node myscript.js < some-input.txt > some-output.txt

工作:

node.exe myscript.js < some-input.txt > some-output.txt

如果你在Windows

中使用GitBash

在文件 ./bash_profile 中,您必须添加:

alias docker='winpty -Xallow-non-tty -Xplain docker'