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

41

Espero receber algumas críticas por isso, mas não consigo encontrar a resposta em lugar algum. Parece que deveria ser tão óbvio. Às vezes, quando digito um comando incorreto em um terminal do bash, o cursor simplesmente pula para a próxima linha sem nenhum erro ou qualquer coisa. Não sei 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???

Sei que estraguei tudo, mas como faço para voltar ao prompt sem fechar o terminal?

David Kennedy
fonte
Relacionado: O que faz com que vários sinais sejam enviados?
Gilles 'SO- stop be evil' (
:qrealmente funcionou para mim; esse não é um comando do Vim?
The Red Pea

Respostas:

53

Você pode sempre tentar as coisas óbvias como ^C, ^D(EOF), Escape etc., mas se tudo falhar Eu geralmente acabam suspendendo o comando com ^Z(Control-Z), que coloca-me de volta para o shell.

Em seguida, faço um pscomando e anoto o PID (identificação do processo) do comando e emito um comando kill thePID( kill -9 thePIDse o anterior não funcionou) para finalizar o aplicativo.

Observe que essa não é uma maneira organizada (sem trocadilhos) de encerrar o aplicativo / comando e você corre o risco de talvez não salvar alguns dados, etc.

Um exemplo (eu teria usado, tidymas 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
Levon
fonte
8
É isso aí!! ^ Z para o resgate. Muito obrigado.
David Kennedy
3
^ \ (barra invertida, SIGQUIT) funciona em alguns utilitários teimosos que não respondem a ^ C.
Mrb
2
Shh! Não conte às pessoas sobre o ^ \ ou elas também começarão SIG_IGNa fazer isso, então o que faremos?
18712 Alan
11
@godlygeek Você pode me dizer o que %% significa no Linux ou que tipo de coisa é? Eu procurei muito.
Noumenon
11
@Noumenon, dê uma olhada LESS='+/^JOB CONTROL' man bash. %%refere-se ao "trabalho atual".
Curinga
12

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

Tentando com o tidycomando que você mencionou, Ctrl- Dfunciona.

Renan
fonte
CTRL+Ctambém é bom para o Windows CMD.
T.Todua
7

Outra solução (ainda não mencionada) é enviar o SIGQUITsinal usando ctrl+\

É mais forte que um ctrl+c

Gilles Quenot
fonte
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 signalse você quiser saber mais, leia:

man 7 signal
PersianGulf
fonte
3
Ctrl + D é final de arquivo, não sai diretamente.
Gilles 'SO- stop be evil'