Bagaimana cara keluar atau membatalkan perintah bash buruk?

41

Saya berharap untuk mendapatkan beberapa kritik untuk ini, tetapi saya tidak dapat menemukan jawabannya di mana pun. Sepertinya itu harus begitu jelas. Kadang-kadang, ketika saya mengetik perintah buruk di terminal bash, kursor hanya melompat ke baris berikutnya tanpa kesalahan atau apa pun. Saya tidak tahu apa yang saya lakukan salah. Sepertinya saya terjebak dalam program ini. Pemeragaan:

$ tidy

Saya: "Ups! Bukan itu yang saya maksudkan untuk mengetik ..."

:q

Saya: "Itu tidak berhasil ..."

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

Saya tahu saya mengacau, tetapi bagaimana saya kembali ke prompt tanpa menutup terminal?

David Kennedy
sumber
Terkait: Apa yang menyebabkan berbagai sinyal dikirim?
Gilles 'SANGAT berhenti menjadi jahat'
:qsebenarnya bekerja untuk saya; bukankah itu perintah Vim?
The Red Pea

Jawaban:

53

Anda selalu dapat mencoba hal-hal yang jelas seperti ^C, ^D(eof), Escape dll, tetapi jika semua gagal saya biasanya berakhir dengan menunda perintah dengan ^Z(Control-Z) yang menempatkan saya kembali ke shell.

Saya kemudian melakukan psperintah dan mencatat PID (id proses) dari perintah dan kemudian mengeluarkan perintah kill thePID( kill -9 thePIDjika yang sebelumnya tidak bekerja) untuk menghentikan aplikasi.

Perhatikan bahwa ini bukan cara yang rapi (tidak ada permainan kata-kata) untuk menghentikan aplikasi / perintah dan Anda berisiko mengambil risiko tidak menyimpan beberapa data, dll.

Contoh (saya telah menggunakan tidytetapi saya belum menginstalnya):

$ 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
sumber
8
Itu dia!! ^ Z untuk menyelamatkan. Terima kasih banyak.
David Kennedy
3
^ \ (ctrl-backslash, SIGQUIT) berfungsi di beberapa utilitas keras kepala yang tidak merespons ^ C.
mrb
2
Sst! Jangan beri tahu orang tentang ^ atau mereka akan mulai SIG_IGNjuga, lalu apa yang akan kita lakukan?
Alan Curry
1
@godlygeek Bisakah Anda memberi tahu saya apa artinya %% di Linux atau seperti apa itu? Saya banyak mencari.
Noumenon
1
@Noumenon, lihatlah LESS='+/^JOB CONTROL' man bash. %%mengacu pada "pekerjaan saat ini".
Wildcard
12

Coba tekan Ctrl- Datau Ctrl- C. Jika gagal, bunuh prosesnya.

Mencoba dengan tidyperintah yang Anda sebutkan, Ctrl- Dberfungsi.

Renan
sumber
CTRL+Cbaik untuk windows CMD juga.
T.Todua
7

Solusi lain (belum disebutkan) adalah mengirim SIGQUITsinyal menggunakan ctrl+\

Ini lebih kuat dari ctrl+c

Gilles Quenot
sumber
2

CTRL+D == exit shell command

dan

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

Tentu saja, mereka menghasilkan kernel signaljika Anda ingin tahu lebih banyak, baca:

man 7 signal
Teluk Persia
sumber
3
Ctrl + D adalah end-of-file, tidak langsung keluar.
Gilles 'SANGAT berhenti menjadi jahat'