режимы оболочки bash? как передать запрос в оболочку на удаленном сервере - PullRequest
0 голосов
/ 16 мая 2019

У меня есть этот tcp сервер в Node.js, который откроет оболочку и перенаправит запрос к ней:

const net = require('net');
const cp = require('child_process');

const server = net.createServer(s => {

  const bash = cp.spawn('bash');
  s.pipe(bash.stdin, {end:false});
  bash.stdout.pipe(s);
  bash.stderr.pipe(s);


});


server.listen('4004');

Я подключаюсь к нему с помощью netcat следующим образом:

nc localhost 4004

когда открывается bash, я просто получаю что-то вроде этого (буквально):

pwd
/app

ls -a
.
..
Dockerfile
main.js
run.sh


^[[B^[[A

Завершение табуляции не работает, и когда я нажимаю клавишу со стрелкой вверх - я получаю символы ^[[B^[[A1 - такЯ думаю, что bash имеет два режима или что-то в этом роде - запись в стандартный вывод и ожидание стандартного ввода ... потому что в обычном режиме bash, когда я нажимаю клавиши со стрелками вверх / вниз, он выводит предыдущие команды, если только команда в данный момент не пишет в стандартный вывод, тогда я будуполучить этот garbolly-gunk вывод.

Кто-нибудь знает, как воссоздать хороший опыт оболочки на удаленном сервере?Мой код выше "работает", но это не настоящий терминал, просто процесс bash или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...