Ctrl + C ne fonctionne pas dans gnome-terminal

9

Sur mon hôte Linux, Ctrl+ Cne semble pas fonctionner et je ne sais pas comment procéder pour le faire fonctionner. J'utilise Ubuntu 10.04 avec bash 4.1.5 (1) et travaille dans Gnome-terminal.

Lorsque j'ai appuyé sur Ctrl+ Cpendant l'exécution de ce script, il ne l'a pas forcé à se fermer.

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done
Ankur Agarwal
la source
2
Qu'entendez-vous par «ne fonctionne pas»? Où avez-vous appuyé sur cette touche, que vous attendiez-vous, que s'est-il réellement passé?
Gilles 'SO- arrête d'être méchant'
Peut-être pouvez-vous décrire plus en détail pourquoi vous pensez que Ctrl-C ne fonctionne pas - il y a certaines choses au niveau du noyau qui ne sont pas interruptibles - par exemple, un processus suspendu en attente d'une réponse NFS (échouée) ne peut souvent pas être interrompu
Soren
J'ai mis à jour ma réponse. Fondamentalement, Ctrl C n'a pas mis fin à un script, que je pense devrait être terminé en faisant Ctrl C.
Ankur Agarwal
La stty -asortie contient-elle intr=^C? Comment exécutez-vous le script?
Stéphane Gimenez
1
Veuillez ne pas transposer les questions. Choisissez le site sur lequel vous souhaitez demander et adaptez-le à ce site.
nhinkle

Réponses:

9

Essayez de faire ça

$ stty sane

et voyez si cela résout le problème, vérifiez également si l'intr est correctement défini à l'aide de

$ stty -a

Si vous trouvez que ce intrparamètre est différent de ^ C, vous pouvez également le corriger en tapant

$ stty intr ^v^c
Soren
la source
Cela n'a pas aidé. stty -a affiche "intr = ^ C" (sans les guillemets)
Ankur Agarwal
Dois-je taper le caractère ^ ou appuyer sur la touche Ctrl?
Ankur Agarwal
il vous suffit d'appuyer sur la touche Ctrl (^ est l'abréviation de Ctrl-)
Soren
Peut-être pouvez-vous décrire plus en détail pourquoi vous pensez que Ctrl-C ne fonctionne pas - il y a certaines choses au niveau du noyau qui ne sont pas interruptibles - par exemple, un processus suspendu en attente d'une réponse NFS (échouée) ne peut souvent pas être interrompu
Soren
J'ai ajouté plus de détails à ma question. Fondamentalement, Ctrl C ne met pas fin à un script que j'exécute, et je m'attends à ce qu'il soit terminé sur Ctrl C.
Ankur Agarwal
6

Puisqu'il ressemble à une gnome-terminalconfiguration cassée , vous pouvez essayer de le laisser restaurer les valeurs par défaut en utilisant

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

(Vous devrez redémarrer le terminal pour voir les effets.)

Si tout va bien après cela, faites un rm -rf .gconf/apps/gnome-terminal-BROKEN.

rozcietrzewiacz
la source
4

Les paramètres par défaut dans gnome-terminallient les touches Ctrl-Cet Ctrl-Vpour émuler le comportement de copier-coller de Windows. C'était censé être une fonctionnalité et non un bug :)

Pour désactiver cela, sur le gnome-terminal,

  1. aller vers Menubar -> Edit -> Keyboard Shortcuts
  2. cliquez sur le Ctrl+ Cdans la colonne Touche de raccourci jusqu'à ce que vous voyiez New Accelerator....
  3. appuyez sur la touche Backspaceou Deletepour désactiver la liaison des touches
  4. vérifiez qu'il Disabledapparaît maintenant dans la colonne Clé de raccourci.

Notez que ce changement sera immédiatement effectif sur tous les terminaux gnome.

Astuce: gnome-terminal --show-menubarforcera gnome-terminal à afficher la barre de menus si elle n'est pas affichée.

Hoe-Kit
la source
3

Je vais faire une supposition ici: Ctrl-C fonctionne, mais parce qu'il ps -efaut beaucoup de temps pour s'exécuter par rapport au reste du script, tout ce que vous faites est d'envoyer SIGINT au processus "ps". "ps" se ferme et le script reprend avec une autre itération dans le code de la boucle.

Faites un sleep 10dans votre fenêtre bash, pendant qu'il s'exécute, contrôlez-le. Voyez si cela fonctionne. Si c'est le cas, exécutez votre script d'origine et contrôlez-le plusieurs fois. Tôt ou tard, vous aurez de la chance et le processus bash qui interprète le script obtiendra le SIGINT.

Bruce Ediger
la source
Ctrl C sur sleep 10 ne fonctionne pas non plus.
Ankur Agarwal
2
Donc, utiliser gnome-terminal Ctrl C fonctionne mais Ctrl c ne fonctionne pas. Donc, pour interrompre le sommeil 10 si je fais Ctrl + Maj + c, cela fonctionne. Mais faire Ctrl + c ne fonctionne pas. Pourquoi est-il sensible à la casse.
Ankur Agarwal