在NodeJS流程中创建bash包装器

爱奥尼亚(IonicăBizău):

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

我尝试使用pty.js,管道stdinbash过程中,以及从在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,虽然还算不错,但仍然有问题。

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

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

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

加布里埃尔·彼得罗维(Gabriel Petrovay):

您可能需要将标准输入置于原始模式这样,所有按键都会作为数据事件报告。否则,您只会得到行(每次按该return键)。

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

也许您还可以从其他相关问题中找到更多经验

PS:Vim现在运行得更好:P

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章