我正在 Linux 中创建一个 Node.js 应用程序,当有人通过 WebSocket 连接到服务器时,它会生成一个子进程 bash。它将通过 WebSocket 发送的所有数据发送到 stdin,并将所有 stdout 输出发送到 WebSocket 客户端。我正在使用 xtermjs 制作前端。本质上,我正在使用 HTTP 创建一个远程终端。
如何将退格键发送到标准输入?
\b
和 \x7F
都不适合我。更重要的是,bash(或任何允许编辑输入的 Linux 应用程序)如何接收这些类型的输入?
当我尝试编辑已经使用退格键输入到 bash 中的内容时(通过 WebSocket 作为
\b
或 \x7F
发送),我只是收到有关无效输入的错误,告诉我 ab\b\x7F
命令不存在。
也有可能我根本不明白终端或 shell 是如何工作的,所以请原谅。
\x7F
对应于 DEL
(对于那些在更多遗留环境中拥有经验的人来说,也可以使用 rubout
)。它不会做你认为它会做的事。来自相应的维基百科页面:
它应该不执行任何操作,旨在擦除纸带上不正确的字符。
类似地,与
\b
相对应的 backspace
也不会像你想象的那样做。来自这个相关的 Stack Overflow 问题的已接受答案:
[
] 将终端光标向后移动一格,但不会对退格后的字符执行任何操作。\b
对于那些不习惯在更多“逆计算”环境中工作的人来说,这更类似于←的功能。
您可以通过将
\b
与空格链接来选择执行您希望它执行的操作,然后使用另一个 \b
用空格覆盖前一个字符,然后将光标向后移动一个空格待处理stdin
的下一个输入:\b \b
由于您尚未提供任何代码,因此在此样板代码中应该足以说明如何将这个想法付诸实践:
child_process.stdin.write('\b \b');