Ctrl + C não funciona no terminal gnome

9

No meu host Linux, o Ctrl+ Cparece não funcionar e não sei como proceder para fazê-lo funcionar. Estou usando o Ubuntu 10.04 com bash 4.1.5 (1) e trabalhando no terminal Gnome.

Quando pressionei Ctrl+ Cenquanto este script estava sendo executado, ele não foi fechado.

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done
Ankur Agarwal
fonte
2
O que você quer dizer com "não funciona"? Onde você pressionou essa tecla, o que você esperava que acontecesse, o que realmente aconteceu?
Gilles 'SO- stop be evil' (
Talvez você possa descrever mais detalhes de por que você acha que o Ctrl-C não funciona - há certas coisas no nível do kernel que não são interrompíveis - por exemplo, um processo que está aguardando uma resposta (falha) do NFS frequentemente não pode ser interrompido
Soren
Eu atualizei minha resposta. Basicamente Ctrl C não terminar um roteiro, que eu acho que deve ser encerrado em fazer Ctrl C.
Ankur Agarwal
A stty -asaída contém intr=^C? Como você executa o script?
Stéphane Gimenez
11
Não faça perguntas cruzadas. Escolha o site que você deseja perguntar e adapte-o a esse site.
Nhinkle

Respostas:

9

Tente fazer isso

$ stty sane

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

$ stty -a

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

$ stty intr ^v^c
Soren
fonte
Isso não ajudou. stty -a mostra "intr = ^ C" (sem as aspas)
Ankur Agarwal
Preciso digitar o caractere ^ ou pressionar a tecla Ctrl?
Ankur Agarwal
você só tem que pressionar a tecla Ctrl (^ é curto para Ctrl-)
Soren
Talvez você possa descrever mais detalhes de por que você acha que o Ctrl-C não funciona - há certas coisas no nível do kernel que não são interrompíveis - por exemplo, um processo que está aguardando uma resposta (falha) do NFS frequentemente não pode ser interrompido
Soren
Eu adicionei mais detalhes à minha pergunta. Basicamente Ctrl C não está encerrando um script que eu estou correndo, que espero ser encerrado em Ctrl C.
Ankur Agarwal
6

Como se parece com uma gnome-terminalconfiguração 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 a rm -rf .gconf/apps/gnome-terminal-BROKEN.

rozcietrzewiacz
fonte
4

As configurações padrão em gnome-terminalvinculam as teclas Ctrl-Ce Ctrl-Vpara emular o comportamento de copiar e colar do Windows. Era para ser um recurso, não um bug :)

Para desativar isso, no terminal gnome,

  1. navegar para Menubar -> Edit -> Keyboard Shortcuts
  2. clique no Ctrl+ Cna coluna Tecla de atalho até ver New Accelerator....
  3. pressione a tecla Backspaceou Deletepara desativar a ligação de teclas
  4. verifique se Disabledagora aparece na coluna Tecla de atalho.

Observe que essa alteração será efetivada imediatamente em todos os terminais gnome.

Dica: gnome-terminal --show-menubarforçará o gnome-terminal a mostrar a barra de menus, se não for mostrada.

Hoe-Kit
fonte
3

Vou adivinhar aqui: Ctrl-C funciona, mas como ps -eleva muito tempo para ser executado em relação ao restante do script, tudo o que você faz é enviar o SIGINT para o processo "ps". "ps" sai e o script começa com outra iteração através do código do loop.

Faça um sleep 10na sua janela do bash, enquanto ele é executado, controle-C. Veja se isso funciona. Caso isso aconteça, execute o script original e controle-C várias vezes. Mais cedo ou mais tarde, você terá sorte e o processo bash que interpreta o script obterá o SIGINT.

Bruce Ediger
fonte
Ctrl C no sono 10 também não funciona.
Ankur Agarwal
2
Então, usar o Ctrl C do gnome-terminal funciona, mas Ctrl c não. Então, para interromper o sono 10, se eu pressionar Ctrl + Shift + c, ele funciona. Mas fazer Ctrl + c não funciona. Por que diferencia maiúsculas de minúsculas?
Ankur Agarwal