Ctrl + C não funciona no gnome-terminal

8

No meu host Linux, Ctrl + C parece não funcionar e não sei como proceder para que funcione. Eu estou usando o Ubuntu 10.04 com bash 4.1.5 (1), e trabalhando no terminal Gnome.

Quando pressionei Ctrl + C enquanto este script estava rodando, ele não o fez sair.

#!/bin/bash
for i in 'seq 500'
do
        ps -e > /dev/null
        echo $i
done
    
por abc 12.08.2011 / 00:36

4 respostas

7

Tente fazer isso

$ stty sane

e veja se ele corrige o problema, verifique também se o intr está definido corretamente usando

$ stty -a

Se você achar que intr está definido como algo diferente de ^ C, você também pode corrigi-lo digitando

$ stty intr ^v^c
    
por 11.08.2011 / 23:45
6

Como parece uma configuração gnome-terminal quebrada, você pode tentar restaurar os padrões usando

mv .gconf/apps/gnome-terminal{,-BROKEN}

(Você precisará reiniciar o terminal para ver os efeitos.)

Se tudo estiver bem depois disso, faça um rm -rf .gconf/apps/gnome-terminal-BROKEN .

    
por 12.08.2011 / 11:13
4

As configurações padrão em gnome-terminal ligam as chaves Ctrl-C e Ctrl-V para emular o comportamento de copiar e colar do Windows. Era para ser uma característica não um bug:)

Para desabilitar isso, no terminal gnome,

  1. navegue até Menubar -> Edit -> Keyboard Shortcuts
  2. clique na Ctrl + C na coluna Tecla de atalho até ver New Accelerator... .
  3. pressione a tecla Backspace ou Delete para desativar a ligação de teclas
  4. verifique se Disabled agora aparece na coluna Tecla de atalho.

Note que esta mudança será imediatamente efetiva em todos gnome-terminais.

Dica: gnome-terminal --show-menubar forçará o terminal gnome a mostrar o menu se não for mostrado.

    
por 29.02.2012 / 04:14
3

Vou adivinhar aqui: Ctrl-C funciona, mas porque ps -e demora muito para rodar em relação ao resto do script, tudo que você faz é enviar o SIGINT para o "ps" processo. "ps" sai, e o script escolhe outra iteração através do código de loop.

Faça um sleep 10 em sua janela do bash, enquanto ele roda, controle-o. Veja se isso funciona. Em caso afirmativo, execute seu script original e controle-o várias vezes. Mais cedo ou mais tarde, você terá sorte e o processo bash que interpreta o script receberá o SIGINT.

    
por 12.08.2011 / 03:17