Ctrl + C non funziona in gnome-terminal


9

Sul mio host Linux, Ctrl+ Csembra non funzionare e non so come procedere per farlo funzionare. Sto usando Ubuntu 10.04 con bash 4.1.5 (1) e sto lavorando su Gnome-terminal.

Quando ho premuto Ctrl+ Cmentre questo script era in esecuzione, non ha causato la chiusura.

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done

2
Cosa intendi con "non funziona"? Dove hai premuto quel tasto, cosa ti aspettavi che accadesse, cosa è realmente accaduto?
Gilles 'SO- smetti di essere malvagio'

Forse puoi descrivere ulteriori dettagli del perché pensi che Ctrl-C non funzioni - ci sono alcune cose a livello di kernel che non sono interrompibili - ad esempio un processo sospeso in attesa di una risposta NFS (non riuscita) spesso non può essere interrotto
Soren,

Ho aggiornato la mia risposta. Fondamentalmente Ctrl C non ha terminato uno script, che penso dovrebbe essere terminato facendo Ctrl C.
Ankur Agarwal

L' stty -aoutput contiene intr=^C? Come si esegue lo script?
Stéphane Gimenez,

1
Si prega di non inviare domande incrociate. Scegli il sito su cui vuoi chiedere e personalizzalo su quel sito.
nhinkle

Risposte:


9

Prova a farlo

$ stty sane

e vedi se risolve il problema, controlla anche se l'intr è impostato correttamente usando

$ stty -a

Se trovi che intrè impostato su qualcosa di diverso da ^ C, puoi anche correggerlo digitando

$ stty intr ^v^c

Questo non ha aiutato. stty -a mostra "intr = ^ C" (senza virgolette)
Ankur Agarwal

Devo digitare il carattere ^ o premere il tasto Ctrl?
Ankur Agarwal,

devi solo premere il tasto Ctrl (^ è l'abbreviazione di Ctrl-)
Soren

Forse puoi descrivere ulteriori dettagli del perché pensi che Ctrl-C non funzioni - ci sono alcune cose a livello di kernel che non sono interrompibili - ad esempio un processo sospeso in attesa di una risposta NFS (non riuscita) spesso non può essere interrotto
Soren,

Ho aggiunto maggiori dettagli alla mia domanda. Fondamentalmente Ctrl C non sta terminando uno script che sto eseguendo, che mi aspetto di essere terminato su Ctrl C.
Ankur Agarwal

6

Dal momento che sembra una gnome-terminalconfigurazione interrotta , puoi provare a lasciare che ripristini i valori predefiniti usando

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

(Dovrai riavviare il terminale per vedere gli effetti.)

Se dopo tutto va bene, fai a rm -rf .gconf/apps/gnome-terminal-BROKEN.


4

Le impostazioni predefinite in gnome-terminalassociano i tasti Ctrl-Ce Ctrl-Vper emulare il comportamento di copia e incolla di Windows. Doveva essere una caratteristica, non un bug :)

Per disabilitarlo, sul terminale gnome,

  1. navigare verso Menubar -> Edit -> Keyboard Shortcuts
  2. fai clic su Ctrl+ Cnella colonna Tasto di scelta rapida fino a visualizzare New Accelerator....
  3. premere il tasto Backspaceo Deleteper disabilitare l'associazione dei tasti
  4. verifica che Disabledora compaiano nella colonna Tasto di scelta rapida.

Nota che questa modifica sarà immediatamente effettiva su tutti i terminali di gnome.

Suggerimento: gnome-terminal --show-menubarforzerà gnome-terminal a mostrare la barra dei menu se non viene mostrata.


3

Ho intenzione di indovinare qui: Ctrl-C funziona, ma poiché ps -erichiede molto tempo per essere eseguito rispetto al resto dello script, tutto ciò che fai è inviare SIGINT al processo "ps". "ps" esce e lo script riprende con un'altra iterazione attraverso il codice del ciclo.

Fai un sleep 10nella tua finestra bash, mentre è in esecuzione, controlla-C. Vedi se funziona. In tal caso, esegui lo script originale e control-C più volte. Prima o poi, sarai fortunato e il processo bash che interpreta lo script otterrà SIGINT.


Ctrl C su sleep 10 non funziona neanche.
Ankur Agarwal,

2
Quindi usando gnome-terminal Ctrl C funziona ma Ctrl c no. Quindi, per interrompere il sonno 10 se faccio Ctrl + Maiusc + c, funziona. Ma fare Ctrl + c non funziona. Perché è case sensitive.
Ankur Agarwal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.