Come posso uscire o annullare un comando bash errato?


41

Mi aspetto di avere qualche difetto per questo, ma non riesco a trovare la risposta da nessuna parte. Sembra che dovrebbe essere così ovvio. A volte, quando digito un comando errato in un terminale bash, il cursore passa alla riga successiva senza errori o altro. Non so dire cosa ho fatto di sbagliato. È come se fossi bloccato nel programma. rievocazione:

$ tidy

Io: "Oops! Non è quello che intendevo scrivere ..."

:q

Io: "Non ha funzionato ..."

:exit
:quit
exit
quit
/exit
/quit
-exit
-quit
-wtf???

So di aver sbagliato ma come posso tornare al prompt senza chiudere il terminale?



:qha funzionato davvero per me; non è un comando Vim?
The Red Pea,

Risposte:


53

Puoi sempre provare cose ovvie come ^C, ^D(eof), Escape ecc., Ma se tutto fallisce di solito finisco per sospendere il comando con ^Z(Control-Z) che mi riporta nella shell.

Quindi eseguo un pscomando e noto il PID (ID processo) del comando, quindi emetto un comando kill thePID( kill -9 thePIDse il primo non ha funzionato) per terminare l'applicazione.

Si noti che questo non è un modo ordinato (nessun gioco di parole previsto) per terminare l'applicazione / comando e si corre il rischio di non salvare forse alcuni dati ecc.

Un esempio (avrei usato tidyma non l'ho installato):

$ gnuplot

    G N U P L O T
    Version 4.2 patchlevel 6 
     ....
    Send bug reports and suggestions to <http://sourceforge.net/projects/gnuplot>

Terminal type set to 'wxt'
gnuplot> 
gnuplot>               #####  typed ^Z here
[1]+  Stopped                 gnuplot
$ ps
  PID TTY          TIME CMD
 1681 pts/1    00:00:00 tcsh
 1690 pts/1    00:00:00 bash
 1708 pts/1    00:00:00 gnuplot
 1709 pts/1    00:00:00 ps


$ kill 1708            ###### didn't kill the command as ps shows

$ ps
  PID TTY          TIME CMD
 1681 pts/1    00:00:00 tcsh
 1690 pts/1    00:00:00 bash
 1708 pts/1    00:00:00 gnuplot
 1710 pts/1    00:00:00 ps
$ kill -9 1708           ### -9 did the trick
$ 
[1]+  Killed                  gnuplot

$ ps
  PID TTY          TIME CMD
 1681 pts/1    00:00:00 tcsh
 1690 pts/1    00:00:00 bash
 1711 pts/1    00:00:00 ps

8
Questo è tutto!! ^ Z in soccorso. Grazie mille.
David Kennedy,

3
^ \ (ctrl-backslash, SIGQUIT) funziona in alcuni programmi di utilità testardi che non rispondono a ^ C.
MR

2
Shh! Non dire alla gente del ^ \ o inizieranno SIG_IGNanche quello, quindi cosa faremo?
Alan Curry,

1
@godlygeek Puoi dirmi cosa significa %% in Linux o che tipo di cosa è? Ho cercato molto.
Noumenon,

1
@Noumenon, dai un'occhiata LESS='+/^JOB CONTROL' man bash. %%si riferisce al "lavoro corrente".
Wildcard

12

Prova a premere Ctrl- Do Ctrl- C. Se fallisce, uccidi il processo.

Provando con il tidycomando che hai citato, Ctrl- Dfunziona.


CTRL+Cè buono anche per Windows CMD.
T.Todua,

7

Un'altra soluzione (non menzionata già) è inviare il SIGQUITsegnale usando ctrl+\

È più forte di un ctrl+c


2

CTRL+D == exit shell command

e

CTRL+ C == terminate the current process, Of course may be the given software handle it and CTRL+D doens't work

Certo, producono un kernel signalse vuoi saperne di più, leggi:

man 7 signal

3
Ctrl + D è fine del file, non direttamente uscita.
Gilles 'SO- smetti di essere malvagio' il
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.