Comment puis-je quitter ou annuler une commande bad bash?

41

Je m'attends à quelque chose pour cela, mais je ne trouve la réponse nulle part. Il semble que cela devrait être si évident. Parfois, lorsque je tape une mauvaise commande dans un terminal bash, le curseur passe à la ligne suivante sans erreur ni rien. Je ne peux pas dire ce que j'ai mal fait. C'est comme si je suis coincé dans le programme. Reconstitution:

$ tidy

Moi: "Oups! Ce n'est pas ce que je voulais dactylographier ..."

:q

Moi: "Ça n'a pas marché ..."

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

Je sais que j'ai foiré, mais comment puis-je revenir à l'invite sans fermer le terminal?

David Kennedy
la source
Connexes: Qu'est
Gilles 'SO- arrête d'être méchant'
:qeffectivement travaillé pour moi; n'est-ce pas une commande de Vim?
Le pois rouge

Réponses:

53

Vous pouvez toujours essayer les choses évidentes comme ^C, ^D(EOF), Évasion etc., mais si j'échoue finir par suspendre habituellement la commande avec ^Z(Ctrl-Z) , qui met - moi dans la coquille.

Je fais ensuite une pscommande et note le PID (id de processus) de la commande, puis émets une commande kill thePID( kill -9 thePIDsi le précédent ne fonctionne pas) pour mettre fin à l'application.

Notez que ce n'est pas une manière ordonnée (sans jeu de mots) de mettre fin à l'application / commande et vous courez le risque de ne pas sauvegarder certaines données, etc.

Un exemple (je l'aurais utilisé tidymais je ne l'ai pas installé):

$ 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
la source
8
C'est ça!! ^ Z à la rescousse. Merci beaucoup.
David Kennedy
3
^ \ (ctrl-backslash, SIGQUIT) fonctionne dans certains utilitaires obstinés qui ne répondent pas à ^ C.
mrb
2
Chut! Ne parlez pas aux gens du ^ ou ils commenceront SIG_IGNaussi, alors que ferons-nous?
Alan Curry
1
@godlygeek Pouvez-vous me dire ce que %% signifie sous Linux ou de quel genre de chose s'agit-il? J'ai beaucoup cherché.
Noumenon
1
@Noumenon, regardez LESS='+/^JOB CONTROL' man bash. %%fait référence au "travail actuel".
Wildcard
12

Essayez d'appuyer sur Ctrl- Dou Ctrl- C. Si cela échoue, tuez le processus.

Essayer avec la tidycommande que vous avez mentionnée Ctrl- Dfonctionne.

Renan
la source
CTRL+Cest bon pour Windows CMD aussi.
T.Todua
7

Une autre solution (non déjà mentionnée) consiste à envoyer le SIGQUITsignal avec ctrl+\

C'est plus fort qu'un ctrl+c

Gilles Quenot
la source
2

CTRL+D == exit shell command

et

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

Bien sûr, ils produisent un kernel signalsi vous voulez en savoir plus, lisez:

man 7 signal
Golfe Persique
la source
3
Ctrl + D est la fin du fichier, pas directement quitter.
Gilles 'SO- arrête d'être méchant'