Kötü bir bash komutundan nasıl çıkar veya iptal ederim?


41

Bunun için biraz pilav almayı umuyorum ama cevabı hiçbir yerde bulamıyorum. Çok açık olması gerektiği gibi görünüyor. Bazen, bash terminalinde hatalı bir komut yazdığımda, imleç sadece herhangi bir hata veya başka bir şey olmadan bir sonraki satıra atlar. Neyi yanlış yaptığımı söyleyemem. Programda sıkışıp kalmışım gibi. Yeniden Sahneleme:

$ tidy

Ben: "Hata! Yazmak istediğim bu değil ..."

:q

Ben: "İşe yaramadı ..."

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

Berbat ettiğimi biliyorum ama terminali kapatmadan istemime nasıl geri dönerim?



:qaslında benim için çalıştı; Bu bir Vim komutu değil mi?
Kırmızı Bezelye

Yanıtlar:


53

Hep gibi bariz şeyler deneyebilirsiniz ^C, ^D(EOF) vb Escape, ancak tüm başarısız olursa Genellikle ile komutu askıya sona ^Zbeni kabuk haline geri koyar (Kontrol-Z).

Daha sonra bir pskomut yapıyorum ve komutun PID'sini (işlem kimliğini) not ediyorum ve ardından uygulamayı sonlandırmak için bir kill thePID( kill -9 thePIDeski işe yaramadıysa) komutunu verdim .

Bunun, uygulamayı / komutu sonlandırmanın düzenli (punto amaçlanmayan) bir yolu olmadığını ve belki de bazı verileri kaydetme vs. riskiyle karşı karşıya olduğunu unutmayın.

Bir örnek (kullanmış olurdum tidyama yüklemedim):

$ 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

8
Bu kadar!! ^ Z kurtarmaya. Çok teşekkür ederim.
David Kennedy,

3
^ \ (ctrl-backslash, SIGQUIT), ^ C'ye cevap vermeyen inatçı yardımcı programlarda çalışır.
mrb

2
Sus! İnsanlara ^ \ SIG_IGN'dan bahsetme yoksa onlar da bunu yapmaya başlayacaklar , o zaman ne yapacağız?
Alan Curry,

1
@godlygeek Linux'ta %%'nin ne anlama geldiğini veya nasıl bir şey olduğunu söyleyebilir misiniz? Ben çok aradım.
Noumenon

1
@ Noumenon, şuna bir bak LESS='+/^JOB CONTROL' man bash. %%"mevcut iş" anlamına gelir.
Joker

12

Ctrl- Dveya Ctrl- düğmesine basmayı deneyin C. Başarısız olursa, süreci öldürün.

tidyBahsettiğiniz komutla denemek , Ctrl- Dçalışır.


CTRL+CWindows CMD için de iyidir.
T.Todua,

7

Başka bir çözüm (daha önce bahsedilmemiş) + SIGQUITişaretini kullanarak sinyal göndermektir.ctrl\

Öyle güçlü bir daha ctrl+c


2

CTRL+D == exit shell command

ve

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

Tabii ki, kernel signaldaha fazla bilgi edinmek istiyorsanız , üretirler :

man 7 signal

3
Ctrl + D bir dosya sonu, doğrudan çıkmıyor.
Gilles 'SO- kötülük olmayı'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.