it-swarm-eu.dev

Jak ukončím nebo zruším špatný bash příkaz?

Očekávám, že za to dostanu nějaké šupiny, ale odpověď nemůžu najít nikde. Vypadá to, že by to mělo být tak zřejmé. Někdy, když zadám špatný příkaz v bash terminálu, kurzor jednoduše skočí dolů na další řádek bez jakékoli chyby nebo tak něco. Nemohu říct, co jsem udělal špatně. Je to, jako bych uvízl v programu. Rekonstrukce:

$ tidy

Já: "Jejda! To není to, co jsem chtěl napsat ..."

:q

Já: "To nefungovalo ..."

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

Vím, že jsem to posral, ale jak se mohu vrátit do Prompt bez uzavření terminálu?

44
Big McLargeHuge

Vždy si můžete vyzkoušet zjevné věci jako ^C, ^D (eof), Escape atd., ale pokud dojde k selhání, obvykle skončím pozastavením příkazu pomocí ^Z (Control-Z), což mě vrací zpět do Shell.

Poté provedu příkaz ps a zapíšu si PID (id procesu) příkazu a poté vydám kill thePID (kill -9 thePID pokud bývalý nefungoval) příkaz k ukončení aplikace.

Všimněte si, že to není klizený (bez použití slovní hříčky) způsob, jak ukončit aplikaci/příkaz a vystavujete se riziku, že možná nebudou uložena některá data atd.

Příklad (použil bych tidy, ale nemám nainstalován):

$ 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
55
Levon

Zkuste stisknout Ctrl-D nebo Ctrl-C. Pokud selže, zabijte tento proces.

Při pokusu s příkazem tidy, který jste zmínili, Ctrl-D funguje.

13
Renan

Dalším řešením (dosud neuvedeným) je poslat signál SIGQUIT pomocí ctrl+\

Je silnější než a ctrl+c

7
Gilles Quenot

CTRL+D == exit Shell command

a

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

Samozřejmě produkují kernel signal Pokud se chcete dozvědět více, přečtěte si:

man 7 signal
4
PersianGulf