Bash 绑定命令对于交互式命令无法正常工作

Bash 绑定命令对于交互式命令无法正常工作

当我尝试使用bind -xbash 实用程序绑定一些命令时,我在终端上看不到我的标准输入输入。

例子:

root> # bind -x '"\C-p": su dargod'

当我输入 ctrl+P - 我登录到用户 dargod,但我输入的所有内容都没有显示。与用于连接的 bind ssh 命令相同的情况。

我如何才能正常地与 shell 交互?

信息:

Bash 3.1.17 (CentOS 5)
Bash 4.2.46 (CentOS 7)
Bash 4.1.2 (CentOS 6)
Bash 5.0.7 (Arch Linux)
Bash 4.2.45 (Gentoo)

答案1

绑定到按键的命令旨在用作行编辑的一部分。它们以原始模式运行终端,没有回显,bash 期望处理每个按键。大多数命令期望在终端中运行煮熟模式,终端一次读取一行并回显输入。

要运行接管终端交互的命令,请暂时将终端设置为“cooked”模式。

bind -x '"\C-p": _bash_stty_save=$(stty -g); stty sane; su dargod; stty "$_bash_stty_save"'

请注意,这可能仍然无法完美工作,因为您正在做 bash 不期望的事情。绑定不是运行命令的正确工具。要定义命令的快捷方式,请使用别名


1 严格来说,它不是一个完整的原始模式,因为^C, ^Z, ^\( isig) 和^Q/ ^S( ixon) 在 bash 行编辑器中没有被禁用(即使^S与其 emacs 模式增量搜索冲突)。

相关内容