Existe alguma maneira de remover ^Cquando você clica em CTRL+ Cno shell incluído no Red Hat Enterprise Linux 6 ("Santiago")? Eu tenho permissão para editar meus próprios .bash_profile.
Edite (ou crie) seu ~/.inputrcarquivo. Adicione uma linha dizendo
set echo-control-characters Off
Isso instruirá a biblioteca GNU Readline (que o Bash usa) a não enviar (ecoar) nenhum caractere de controle para a tela. A configuração estará ativa em todas as novas sessões do Bash posteriormente (e em qualquer outro utilitário que use a biblioteca Readline).
Observe que, se o seu sistema Unix vier com um arquivo de configuração de todo o sistema para a biblioteca Readline (geralmente /etc/inputrc), seu arquivo de configuração pessoal precisará incluir esse arquivo:
$include /etc/inputrc
set echo-control-characters Off
Outra alternativa é fazer uma cópia pessoal do arquivo de configuração em todo o sistema e modificá-lo.
Oi, eu testei este e seu funcionando bem, mas quando eu interromper um comando rodando o bash didnt trabalhou, por exemplo sleep 180e pressione CTRL + C
rɑːdʒɑ
@ Ten-Coin Só funcionará se o comando usar a biblioteca Readline infelizmente.
Kusalananda
11
Se ~/.inputrcainda não existir, simplesmente criar o arquivo poderá perder algumas configurações existentes. No meu caso, notei que ctrl + left e ctrl + right haviam parado de funcionar. A solução era começar o meu ~/.inputrccom esta linha $include /etc/inputrc. Também é possível apenas cp /etc/inputrc .inputrceditar e editar conforme desejado.
kasperd
2
@kasperd Good point! Eu não sabia que a adição de um arquivo de configuração pessoal desabilitaria a leitura do arquivo de configuração em todo o sistema (meu sistema não possui um). Vou atualizar minha resposta.
Se você deseja tornar essa alteração permanente (e você está usando bashcomo está implícito na sua pergunta), é melhor inseri-la.bashrc como observado por jlmg nos comentários (assim se aplica a todos os shells interativos).
+1 Em contraste com a solução readline, isso deve funcionar para a maioria, senão para todas as coisas em execução no terminal.
JOL
11
Deve-se mencionar provavelmente que ele não funcionará em todos os terminais se colocado .bash_profilecomo esse arquivo apenas é analisado por shells de login. Em .bashrcvez disso, deve ser inserido , para que seja lido por todas as chamadas interativas.
JOL
11
Isso ainda não fará eco do byte bruto de 0x03, que teoricamente pode ser interpretado por alguns terminais? Ele também terá efeitos colaterais se você fazer coisas como correr um comando não-readline, pressionando uma tecla de seta irá mover o cursor na tela em vez de mostrar^[[A
Random832
11
@ Random832 +1 Você está certo. Eu acho que essa configuração é apenas mal nomeada; ele não controla o eco dos caracteres de controle, mas sua tradução para caracteres imprimíveis antes de ecoar. Para evitar esse efeito colateral, você precisaria stty -echotambém. É claro que isso também impedirá o eco de todo o resto, o que provavelmente torna essa resposta um impedimento, se tudo o que você queria era esconder os ^Cs.
31416 JoL
11
@ jlmg Se o ^Cfoi sempre no final, posso concordar com você. Mas o ^Cserá impresso onde quer que esteja o cursor, que pode sobrescrever um par de caracteres em qualquer lugar do comando. Isso significa que, se você precisar copiar e colar partes desse comando, poderá acabar com algo mutilado. E isso ^Cnão é tão facilmente reconhecido quando se olha o terminal como teria sido se estivesse no final do comando.
kasperd
2
Se você está tentando encontrar uma configuração que permita eco normal (incluindo echoctl) e apenas silencie o eco de caracteres geradores de sinal, e você tem certeza de que isso será possível porque você já viu isso funcionar dessa maneira antes ...
Você provavelmente já viu dessa maneira. Mas não é mais possível, por causa desse commit :
Ative eco INTR / QUIT / SUSP na disciplina de linha N_TTY (por exemplo, ctrl-C aparecerá como "^ C" se stty echoctl estiver definido e ctrl-C estiver definido como INTR).
O Linux parece ser o único sistema operacional semelhante ao Unix (recentemente eu verifiquei isso no Solaris, BSD e Mac OS X) que não se comporta dessa maneira, e eu realmente sinto falta disso como uma boa confirmação visual da interrupção de um programa no console ou no xterm. Lembro-me disso com carinho de muitos Unixs que usei ao longo dos anos também. Trazer isso para o Linux também parece ser uma boa maneira de torná-lo ainda mais compatível com o comportamento padrão do tipo unix.
Se você se lembrar com carinho de como o Linux não ecoava isso ^C, a única maneira de recuperar o comportamento antigo é corrigir o kernel. Nas versões recentes, o eco dos caracteres geradores de sinal está nas linhas 1215-1218 de drivers / tty / n_tty.c .
set echo-control-characters off
Respostas:
Edite (ou crie) seu
~/.inputrc
arquivo. Adicione uma linha dizendoIsso instruirá a biblioteca GNU Readline (que o Bash usa) a não enviar (ecoar) nenhum caractere de controle para a tela. A configuração estará ativa em todas as novas sessões do Bash posteriormente (e em qualquer outro utilitário que use a biblioteca Readline).
Observe que, se o seu sistema Unix vier com um arquivo de configuração de todo o sistema para a biblioteca Readline (geralmente
/etc/inputrc
), seu arquivo de configuração pessoal precisará incluir esse arquivo:Outra alternativa é fazer uma cópia pessoal do arquivo de configuração em todo o sistema e modificá-lo.
fonte
sleep 180
e pressione CTRL + C~/.inputrc
ainda não existir, simplesmente criar o arquivo poderá perder algumas configurações existentes. No meu caso, notei que ctrl + left e ctrl + right haviam parado de funcionar. A solução era começar o meu~/.inputrc
com esta linha$include /etc/inputrc
. Também é possível apenascp /etc/inputrc .inputrc
editar e editar conforme desejado.Tente o seguinte:
Para uma explicação, veja este post excelente e detalhado de Stéphane Chazelas que também explica alguns outros
stty
recursos .Se você deseja tornar essa alteração permanente (e você está usando
bash
como está implícito na sua pergunta), é melhor inseri-la.bashrc
como observado por jlmg nos comentários (assim se aplica a todos os shells interativos).fonte
.bash_profile
como esse arquivo apenas é analisado por shells de login. Em.bashrc
vez disso, deve ser inserido , para que seja lido por todas as chamadas interativas.^[[A
stty -echo
também. É claro que isso também impedirá o eco de todo o resto, o que provavelmente torna essa resposta um impedimento, se tudo o que você queria era esconder os^C
s.^C
foi sempre no final, posso concordar com você. Mas o^C
será impresso onde quer que esteja o cursor, que pode sobrescrever um par de caracteres em qualquer lugar do comando. Isso significa que, se você precisar copiar e colar partes desse comando, poderá acabar com algo mutilado. E isso^C
não é tão facilmente reconhecido quando se olha o terminal como teria sido se estivesse no final do comando.Se você está tentando encontrar uma configuração que permita eco normal (incluindo
echoctl
) e apenas silencie o eco de caracteres geradores de sinal, e você tem certeza de que isso será possível porque você já viu isso funcionar dessa maneira antes ...Você provavelmente já viu dessa maneira. Mas não é mais possível, por causa desse commit :
Se você se lembrar com carinho de como o Linux não ecoava isso
^C
, a única maneira de recuperar o comportamento antigo é corrigir o kernel. Nas versões recentes, o eco dos caracteres geradores de sinal está nas linhas 1215-1218 de drivers / tty / n_tty.c .fonte