当我尝试使用bind -x
bash 实用程序绑定一些命令时,我在终端上看不到我的标准输入输入。
例子:
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 模式增量搜索冲突)。