我如何将退格键发送到标准输入?

问题描述 投票:0回答:1

我正在 Linux 中创建一个 Node.js 应用程序,当有人通过 WebSocket 连接到服务器时,它会生成一个子进程 bash。它将通过 WebSocket 发送的所有数据发送到 stdin,并将所有 stdout 输出发送到 WebSocket 客户端。我正在使用 xtermjs 制作前端。本质上,我正在使用 HTTP 创建一个远程终端。

如何将退格键发送到标准输入?

\b
\x7F
都不适合我。更重要的是,bash(或任何允许编辑输入的 Linux 应用程序)如何接收这些类型的输入?

当我尝试编辑已经使用退格键输入到 bash 中的内容时(通过 WebSocket 作为

\b
\x7F
发送),我只是收到有关无效输入的错误,告诉我
ab\b\x7F
命令不存在。

也有可能我根本不明白终端或 shell 是如何工作的,所以请原谅。

node.js stdin stdio
1个回答
0
投票

\x7F
对应于
DEL
(对于那些在更多遗留环境中拥有经验的人来说,也可以使用
rubout
)。它不会做你认为它会做的事。来自相应的维基百科页面

它应该不执行任何操作,旨在擦除纸带上不正确的字符。

类似地,与

\b
相对应的
backspace
也不会像你想象的那样做。来自这个相关的 Stack Overflow 问题的已接受答案:

[

\b
] 将终端光标向后移动一格,但不会对退格后的字符执行任何操作。

对于那些不习惯在更多“逆计算”环境中工作的人来说,这更类似于的功能。

您可以通过将

\b
与空格链接来选择执行您希望它执行的操作,然后使用另一个
\b
用空格覆盖前一个字符,然后将光标向后移动一个空格待处理
stdin
的下一个输入:
\b \b

由于您尚未提供任何代码,因此在此样板代码中应该足以说明如何将这个想法付诸实践:

child_process.stdin.write('\b \b');
© www.soinside.com 2019 - 2024. All rights reserved.