Shell 删除输入的所有其他字符

Shell 删除输入的所有其他字符

我在一堆 RHEL 6.10 VM 上管理软件,通常作为服务帐户或使用sudo -i.我的 shell 会定期删除所有其他字符。例如,如果我输入

cd /usr/local

实际显示的是

d/s/oa

这不仅仅是装饰性的;如果我按 Enter 键,我会得到

-bash: d/s/oa: No such file or directory

我找到的唯一解决方案是注销 sudo 会话(因为^D^D第一个会话被忽略)并重新登录。这让我相信这不是我的终端或 ssh 客户端的问题,但以防万一,这是完整的堆栈:

Human > Keyboard > Windows 10 > MobaXTerm > WSL OpenSuse > tmux > ssh > bash > sudo

显然,我可以尝试从堆栈中删除 tmux,或者完全删除 WSL,但这会限制我的工作流程并且难以排除故障,因为这是一个间歇性问题,我每周只遇到一次。

可能是什么原因造成的?

答案1

我有使用 Putty、RHEL 8 和 XMing 的经验。

我忘记在 Putty 会话之前添加 XMing。我发现先逆向并执行 XMing,然后使用 Putty 即可解决该问题。

或者,如果我运行了 XMing,然后运行 ​​Putty 到服务器,然后通过 ssh 跳转而无需 XAUTH 验证,我按 CTRL -C 几次。

XMing 或 VCXSRV 是导出显示的两个工具。

这两种方法似乎都能清除管道上的污垢,我打字没有问题。你的经历是否相似?

答案2

我在使用不同(且更长)的通信程序堆栈时也遇到类似的键盘问题,例如获取不可见的字符或罕见的代码,但我认为它们是由我无意中按下改变终端功能的组合键引起的。

正如您所说,我真的没有时间深入研究术语定义,寻找哪些键可以引发更改,例如在激烈的打字过程中按 a+b+c 可能会导致键盘发送 XOFF ^S命令发送到远程终端,停止发送输出或类似的内容。我们需要一个按键捕获程序来存储按下的按键,并在遥控器中使用另一个按键捕获程序来获取接收到的按键以进行故障排除。此外,由于涉及多个程序,因此很难责怪其中一个或另一个。

同时,有时终端中的stty saneorreset命令为我解决了这个问题(因为这些情况我认为是 oscure 关键字命令在不知不觉中导致了问题);其他时候,我必须像您一样重新启动 shell,甚至重新连接堆栈的某些部分。

答案3

尝试使用 roaima 在对您的问题的评论中建议的 lsof 命令。下面的示例显示了 bash 和 lsof 命令如何打开文件描述符 (FD) 0 (=stdin),但在命令执行时它们都没有从中读取。您应该查找打开文件描述符 0 的其他进程。将他们一一杀死,直到问题消失。显然不是 bash,除非您看到 FD 0 被 bash 打开多次。

$ lsof /dev/pts/8
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    15190 thisusr    0u   CHR  136,8      0t0   11 /dev/pts/8
bash    15190 thisusr    1u   CHR  136,8      0t0   11 /dev/pts/8
bash    15190 thisusr    2u   CHR  136,8      0t0   11 /dev/pts/8
bash    15190 thisusr  255u   CHR  136,8      0t0   11 /dev/pts/8
lsof    19576 thisusr    0u   CHR  136,8      0t0   11 /dev/pts/8
lsof    19576 thisusr    1u   CHR  136,8      0t0   11 /dev/pts/8
lsof    19576 thisusr    2u   CHR  136,8      0t0   11 /dev/pts/8

相关内容