shell - bash shell 模式?如何通过管道将请求发送到远程服务器上的 shell
问题描述
我在 Node.js 中有这个 tcp 服务器,它将打开一个 shell 并将请求通过管道传输到 shell:
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 输出。
有谁知道如何在远程服务器上重新创建良好的 shell 体验?我上面的代码“有效”,但它不是一个真正的终端,只是一个 bash 进程或其他东西。
解决方案
推荐阅读
- google-analytics - User identification in Google Analytics
- c++ - 在 CMAKE 项目 Visual Studio 中添加自定义标头
- node.js - Nodejs和使用未存储在Firefox中的会话数据表达,chrome浏览器工作正常
- sql - Laravel 8 - 模型上的“刷新()”不执行匿名全局范围
- qt - 在 QLabel 中单独为字符着色
- angular - 无法访问角度类服务返回的数据
- angular - 不能向另一个组件Angular发出多个值
- javascript - 解谜算法将一块棋子移入出口点
- java - Spring Data JPA - 分别过滤@OneToMany 关系
- azure-devops - 避免自动重新分配给工作项的原始所有者的 Azure Devops 规则