¿Cómo salgo o cancelo un comando bash incorrecto?

41

Espero recibir críticas por esto, pero no puedo encontrar la respuesta en ningún lado. Parece que debería ser tan obvio. A veces, cuando escribo un comando incorrecto en un terminal bash, el cursor salta a la siguiente línea sin ningún error ni nada. No puedo decir qué hice mal. Es como si estuviera atrapado en el programa. Recreación:

$ tidy

Yo: "¡Vaya! Eso no es lo que quise escribir ..."

:q

Yo: "Eso no funcionó ..."

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

Sé que me equivoqué, pero ¿cómo vuelvo al mensaje sin cerrar el terminal?

David Kennedy
fuente
Relacionado: ¿Qué causa que se envíen varias señales?
Gilles 'SO- deja de ser malvado'
:qen realidad funcionó para mí; ¿No es eso un comando Vim?
The Red Pea

Respuestas:

53

Siempre puedes probar cosas obvias como ^C, ^D(eof), Escape, etc., pero si todo falla, generalmente termino suspendiendo el comando con ^Z(Control-Z), que me vuelve a poner en el shell.

Luego hago un pscomando y tomo nota del PID (id de proceso) del comando y luego emito un comando kill thePID( kill -9 thePIDsi el primero no funcionó) para finalizar la aplicación.

Tenga en cuenta que esta no es una forma ordenada (sin juego de palabras) de terminar la aplicación / comando y corre el riesgo de quizás no guardar algunos datos, etc.

Un ejemplo (lo habría usado tidypero no lo tengo 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
fuente
8
¡¡Eso es!! ^ Z al rescate. Muchas gracias.
David Kennedy el
3
^ \ (ctrl-backslash, SIGQUIT) funciona en algunas utilidades tercas que no responden a ^ C.
mrb
2
Shh! No le digas a la gente sobre el ^ \ o ellos también comenzarán SIG_IGNa decir eso, entonces ¿qué haremos?
Alan Curry
1
@godlygeek ¿Puedes decirme qué significa %% en Linux o qué tipo de cosa es? Busqué mucho
Noumenon
1
@Noumenon, échale un vistazo LESS='+/^JOB CONTROL' man bash. %%se refiere al "trabajo actual".
Comodín
12

Intenta presionar Ctrl- Do Ctrl- C. Si falla, elimine el proceso.

Intentando con el tidycomando que mencionaste, Ctrl- Dfunciona.

Renan
fuente
CTRL+CTambién es bueno para Windows CMD.
T.Todua
7

Otra solución (no mencionada ya) es enviar la SIGQUITseñal usando ctrl+\

Es más fuerte que un ctrl+c

Gilles Quenot
fuente
2

CTRL+D == exit shell command

y

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

Por supuesto, producen un kernel signalsi quieres saber más, lee:

man 7 signal
Golfo pérsico
fuente
3
Ctrl + D es el final del archivo, no sale directamente.
Gilles 'SO- deja de ser malvado'