Linux 在NodeJS进程中创建bash包装器
我想构建一个小脚本,运行该脚本时应创建一个类似于bash的会话(在当前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
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();
});