Ctrl + \ é um dos caracteres de controle que faz com que o terminal envie um sinal (SIGQUIT), como Ctrl + C (SIGINT) e Ctrl + Z (SIGTSTP). Você pode executar stty -a
para mostrar quais caracteres têm um significado especial para o terminal; consulte Limpar / apague uma senha invisível digitada incorretamente em um shell / terminal no Linux para obter mais detalhes. O resultado é que quando você pressiona Ctrl + \ , o bash não vê um caractere em sua entrada padrão, ele vê um sinal e isso não passa pelo mecanismos de ligação de teclas.
Você pode desativar o significado do caractere no terminal com o comando stty quit undef
. Se você fizer isso, o bash verá o caractere como entrada e sua ligação de chave entrará em vigor.
Para organizar Ctrl + \ para ser uma ligação bash, mas tenha sua ligação de terminal normal ao executar um comando, altere as configurações do terminal before e depois de executar um comando.
preexec () {
stty quit '^\'
}
precmd () {
stty quit undef
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command='HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"';
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
PROMPT_COMMAND='precmd'
Em vez de criar o tipo de chave fg
e uma nova linha, ligue a chave a um comando shell. Você não pode fazer isso de .inputrc
, que se aplica a todos os aplicativos readline, não apenas para bash. Em vez disso, defina uma ligação de bash no seu .bashrc
:
bind -x '"\C-\": "fg"'