Como faço para sair ou cancelar um comando bad bash?

34

Espero receber algumas críticas por isso, mas não consigo encontrar a resposta em nenhum lugar. Parece que deveria ser tão óbvio. Às vezes, quando eu digito um comando ruim em um terminal bash, o cursor simplesmente pula para a próxima linha sem nenhum erro ou qualquer coisa. Eu não posso dizer o que fiz de errado. É como se eu estivesse preso no programa. Reencenação:

$ tidy

Eu: "Opa! Não foi isso que eu quis escrever ..."

:q

Eu: "Isso não funcionou ..."

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

Eu sei que estraguei tudo, mas como volto ao prompt sem fechar o terminal?

    
por David Kennedy 16.08.2012 / 19:34

4 respostas

45

Você sempre pode tentar coisas óbvias como ^C , ^D (eof), Escape etc., mas se tudo falhar, geralmente acabo suspendendo o comando com ^Z (Control-Z), o que me coloca de volta na casca.

Eu então faço um comando ps e anoto o PID (id do processo) do comando e, em seguida, emito o comando kill thePID ( kill -9 thePID se o anterior não funcionar) para finalizar o aplicativo.

Note que este não é um método arrumado (sem trocadilho) para terminar o aplicativo / comando e você corre o risco de talvez não salvar alguns dados, etc.

Um exemplo (eu usei tidy , mas não o tenho instalado):

$ 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
    
por 16.08.2012 / 19:37
11

Tente pressionar Ctrl - D ou Ctrl - C . Se falhar, mate o processo.

Tentando com o comando tidy que você mencionou, Ctrl - D funciona.

    
por 16.08.2012 / 19:37
5

Outra solução (não mencionada já) é enviar o sinal SIGQUIT usando ctrl + \

É mais strong do que um ctrl + c

    
por 05.11.2014 / 20:24
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

Claro, eles produzem um kernel signal se você quiser saber mais, leia:

man 7 signal
    
por 16.08.2012 / 21:34