У меня есть этот 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 или что-то еще.