Strg + C funktioniert nicht im Gnome-Terminal

9

Auf meinem Linux-Host scheint Ctrl+ Cnicht zu funktionieren, und ich weiß nicht, wie ich vorgehen soll, damit es funktioniert. Ich benutze Ubuntu 10.04 mit Bash 4.1.5 (1) und arbeite im Gnome-Terminal.

Wenn ich Ctrl+ drückte, Cwährend dieses Skript ausgeführt wurde, wurde es nicht beendet.

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done
Ankur Agarwal
quelle
2
Was meinst du mit "funktioniert nicht"? Wo haben Sie diese Taste gedrückt, was haben Sie erwartet, was ist tatsächlich passiert?
Gilles 'SO - hör auf böse zu sein'
Vielleicht können Sie weitere Details beschreiben, warum Sie denken, dass Strg-C nicht funktioniert - es gibt bestimmte Dinge auf Kernel-Ebene, die nicht unterbrechbar sind - zum Beispiel kann ein Prozess, der auf eine (fehlgeschlagene) NFS-Antwort wartet, häufig nicht unterbrochen werden
Soren
Ich habe meine Antwort aktualisiert. Grundsätzlich hat Strg C kein Skript beendet, das meiner Meinung nach bei Strg C beendet werden sollte.
Ankur Agarwal
Enthält die stty -aAusgabe intr=^C? Wie führen Sie das Skript aus?
Stéphane Gimenez
1
Bitte stellen Sie keine Fragen. Wählen Sie die Site aus, auf der Sie fragen möchten, und passen Sie sie an diese Site an.
nhinkle

Antworten:

9

Versuchen Sie dies zu tun

$ stty sane

und prüfen Sie, ob das Problem dadurch behoben wird. Überprüfen Sie auch, ob das intr mit richtig eingestellt ist

$ stty -a

Wenn Sie feststellen, dass dies intrauf etwas anderes als ^ C eingestellt ist, können Sie es auch durch Eingabe beheben

$ stty intr ^v^c
Soren
quelle
Das hat nicht geholfen. stty -a zeigt "intr = ^ C" (ohne die Anführungszeichen)
Ankur Agarwal
Muss ich das Zeichen ^ eingeben oder die Strg-Taste drücken?
Ankur Agarwal
Sie müssen nur die Strg-Taste drücken (^ steht für Strg-)
Soren
Vielleicht können Sie weitere Details beschreiben, warum Sie denken, dass Strg-C nicht funktioniert - es gibt bestimmte Dinge auf Kernel-Ebene, die nicht unterbrechbar sind - zum Beispiel kann ein Prozess, der auf eine (fehlgeschlagene) NFS-Antwort wartet, häufig nicht unterbrochen werden
Soren
Ich habe meiner Frage weitere Details hinzugefügt. Grundsätzlich beendet Strg C kein Skript, das ich ausführe, und ich erwarte, dass es auf Strg C beendet wird.
Ankur Agarwal
6

Da es sich um eine fehlerhafte gnome-terminalKonfiguration handelt, können Sie versuchen, die Standardeinstellungen mithilfe von wiederherzustellen

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

(Sie müssen das Terminal neu starten, um die Auswirkungen zu sehen.)

Wenn danach alles in Ordnung ist, machen Sie a rm -rf .gconf/apps/gnome-terminal-BROKEN.

rozcietrzewiacz
quelle
4

Die Standardeinstellungen in gnome-terminalbinden die Tasten Ctrl-Cund Ctrl-V, um das Kopier- und Einfügeverhalten von Windows zu emulieren. Es sollte ein Feature sein, kein Bug :)

Um dies zu deaktivieren, am Gnome-Terminal,

  1. Navigieren Sie zu Menubar -> Edit -> Keyboard Shortcuts
  2. Klicken Sie auf das Ctrl+ Cin der Spalte Tastenkombination, bis Sie sehen New Accelerator....
  3. Drücken Sie die Taste Backspaceoder Delete, um die Tastenbindung zu deaktivieren
  4. Stellen Sie sicher, dass dies Disabledjetzt in der Spalte Tastenkombination angezeigt wird.

Beachten Sie, dass diese Änderung sofort auf allen Gnome-Terminals wirksam wird .

Tipp: gnome-terminal --show-menubarErzwingt, dass das Gnome-Terminal die Menüleiste anzeigt, wenn sie nicht angezeigt wird.

Hacke-Kit
quelle
3

Ich werde hier eine Vermutung anstellen: Strg-C funktioniert, aber da ps -edie Ausführung im Vergleich zum Rest des Skripts sehr lange dauert, müssen Sie nur SIGINT an den "ps" -Prozess senden. "ps" wird beendet und das Skript wird mit einer weiteren Iteration durch den Schleifencode aufgenommen.

Führen Sie sleep 10in Ihrem Bash-Fenster ein Control aus, während es ausgeführt wird. Sehen Sie, ob das funktioniert. Wenn dies der Fall ist, führen Sie Ihr ursprüngliches Skript aus und steuern Sie es mehrmals. Früher oder später haben Sie Glück und der Bash-Prozess, der das Skript interpretiert, erhält das SIGINT.

Bruce Ediger
quelle
Strg C im Schlaf 10 funktioniert auch nicht.
Ankur Agarwal
2
Die Verwendung von gnome-terminal Ctrl C funktioniert also, Ctrl c jedoch nicht. Um Schlaf 10 zu unterbrechen, wenn ich Strg + Umschalt + C mache, funktioniert es. Strg + c funktioniert jedoch nicht. Warum wird zwischen Groß- und Kleinschreibung unterschieden?
Ankur Agarwal