Linux 在NodeJS进程中创建bash包装器

Linux 在NodeJS进程中创建bash包装器,linux,node.js,bash,shell,pty,Linux,Node.js,Bash,Shell,Pty,我想构建一个小脚本,运行该脚本时应创建一个类似于bash的会话(在当前bash会话中,创建该进程),稍后可用于某些疯狂的科学(例如,管道到浏览器) 我尝试使用管道将stdin传输到bash进程,并将数据从bash会话传输到stdout流: var pty = require("pty.js"); var term = pty.spawn('bash', [], { name: 'xterm-color', cols: process.stdout.columns, rows: pr

我想构建一个小脚本,运行该脚本时应创建一个类似于bash的会话(在当前bash会话中,创建该进程),稍后可用于某些疯狂的科学(例如,管道到浏览器)

我尝试使用管道将
stdin
传输到
bash
进程,并将数据从bash会话传输到
stdout
流:

var pty = require("pty.js");

var term = pty.spawn('bash', [], {
  name: 'xterm-color',
  cols: process.stdout.columns,
  rows: process.stdout.rows,
  cwd: ".",
  env: process.env
});

term.pipe(process.stdout);
process.stdin.pipe(term);

term.on("close", function () {
    process.exit();
});
这是可行的,但它有很多问题:

例如,不捕捉非字符(方向键、制表符等)

我还尝试了使用
spawn
,这不是很糟糕,但仍然有bug

var spawn = require("child_process").spawn;

var bash = spawn("bash");
bash.stdout.pipe(process.stdout);
process.stdin.pipe(bash.stdin);

如何在NodeJS中创建bash包装器,有更好的解决方案吗?

您可能希望将标准输入放入。这样,所有的按键将作为数据事件报告。否则,只会显示行(每次按
return
键)

也许你也能从其他人那里找到更多的经验


PS:Vim现在运行得更好了:p

通过
bash-c命令
,而不是
bash命令
@FlorianMargaine为什么?我想启动一个bash会话,使用流和所有东西,而不仅仅是传递命令。然后我误读了。别理我。
process.stdin.setEncoding('utf8');
process.stdin.setRawMode(true);      

var pty = require('pty.js');

var term = pty.spawn('bash', [], {
   name: 'xterm-color',
   cols: process.stdout.columns,
   rows: process.stdout.rows,
   cwd: '.',
   env: process.env
});

term.pipe(process.stdout);
process.stdin.pipe(term);

term.on('close', function () {
    process.exit();
});