Ctrl + C nie działa w terminalu gnome

9

Na moim hoście Linux Ctrl+ Cnie wydaje się działać i nie wiem, jak to zrobić. Używam Ubuntu 10.04 z bash 4.1.5 (1) i pracuję w terminalu Gnome.

Kiedy nacisnąłem Ctrl+ Cpodczas działania tego skryptu, nie spowodowało to jego zamknięcia.

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done
Ankur Agarwal
źródło
2
Co rozumiesz przez „nie działa”? Gdzie nacisnąłeś ten klawisz, czego się spodziewałeś, co się właściwie wydarzyło?
Gilles 'SO - przestań być zły'
Może możesz opisać dalsze szczegóły, dlaczego uważasz, że Ctrl-C nie działa - istnieją pewne rzeczy na poziomie jądra, które nie są przerywane - na przykład proces zawieszający się w oczekiwaniu na (nieudaną) odpowiedź NFS często nie może być przerwany
Soren,
Zaktualizowałem swoją odpowiedź. Zasadniczo Ctrl C nie zakończył skryptu, który moim zdaniem powinien zostać zakończony po zrobieniu Ctrl C.
Ankur Agarwal
Czy stty -awyjście zawiera intr=^C? Jak uruchomić skrypt?
Stéphane Gimenez
1
Proszę nie zadawać pytań. Wybierz witrynę, o którą chcesz zapytać, i dostosuj ją do tej witryny.
nhinkle

Odpowiedzi:

9

Spróbuj to zrobić

$ stty sane

i sprawdź, czy to rozwiązuje problem, sprawdź również, czy intr jest poprawnie ustawiony za pomocą

$ stty -a

Jeśli okaże się, że intrjest ustawiony na coś innego niż ^ C, możesz to naprawić, wpisując

$ stty intr ^v^c
Soren
źródło
To nie pomogło. stty -a pokazuje „intr = ^ C” (bez cudzysłowów)
Ankur Agarwal
Czy muszę wpisać znak ^ lub nacisnąć klawisz Ctrl?
Ankur Agarwal
wystarczy nacisnąć klawisz Ctrl (^ to skrót od Ctrl-)
Soren
Może możesz opisać dalsze szczegóły, dlaczego uważasz, że Ctrl-C nie działa - istnieją pewne rzeczy na poziomie jądra, które nie są przerywane - na przykład proces zawieszający się w oczekiwaniu na (nieudaną) odpowiedź NFS często nie może być przerwany
Soren,
Dodałem więcej szczegółów do mojego pytania. Zasadniczo Ctrl C nie kończy uruchomionego przeze mnie skryptu, który powinien zostać zakończony w Ctrl C.
Ankur Agarwal
6

Ponieważ wygląda to na uszkodzoną gnome-terminalkonfigurację, możesz spróbować pozwolić mu przywrócić ustawienia domyślne za pomocą

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

(Musisz ponownie uruchomić terminal, aby zobaczyć efekty.)

Jeśli po tym wszystko jest w porządku, zrób to rm -rf .gconf/apps/gnome-terminal-BROKEN.

rozcietrzewiacz
źródło
4

Domyślne ustawienia w gnome-terminalwiążą klawisze Ctrl-Ci Ctrl-V, aby emulować zachowanie systemu Windows do kopiowania i wklejania. Miała to być funkcja, a nie błąd :)

Aby to wyłączyć, na terminalu gnome

  1. nawigować do Menubar -> Edit -> Keyboard Shortcuts
  2. kliknij Ctrl+ Cw kolumnie Klawisz skrótu, aż zobaczysz New Accelerator....
  3. naciśnij klawisz Backspacelub Delete, aby wyłączyć powiązanie klawiszy
  4. sprawdź, czy Disabledteraz pojawiają się w kolumnie Klucz skrótu.

Zauważ, że ta zmiana będzie natychmiast obowiązywać na wszystkich terminalach gnome.

Wskazówka: gnome-terminal --show-menubarzmusi gnome-terminal do wyświetlenia paska menu, jeśli nie jest pokazany.

Zestaw do motyki
źródło
3

Zgaduję tutaj: Ctrl-C działa, ale ponieważ ps -euruchomienie go w stosunku do reszty skryptu zajmuje dużo czasu, wystarczy, że wyślesz SIGINT do procesu „ps”. „ps” kończy działanie, a skrypt rozpoczyna od kolejnej iteracji poprzez kod pętli.

Zrób a sleep 10w oknie bash, gdy jest uruchomione, wciśnij klawisz C i wciśnij klawisz Control. Sprawdź, czy to działa. Jeśli tak, uruchom oryginalny skrypt i naciśnij C-Control kilka razy. Wcześniej czy później będziesz mieć szczęście, a proces bash, który interpretuje skrypt, dostanie SIGINT.

Bruce Ediger
źródło
Ctrl C w trybie uśpienia 10 również nie działa.
Ankur Agarwal,
2
Więc użycie gnome-terminalu Ctrl C działa, ale Ctrl c nie. Aby przerwać sen 10, jeśli zrobię Ctrl + Shift + c, to zadziała. Ale wykonanie Ctrl + c nie działa. Dlaczego wielkość liter ma znaczenie?
Ankur Agarwal