Làm cách nào để thoát hoặc hủy lệnh bash xấu?


41

Tôi hy vọng sẽ nhận được một số flak cho điều này, nhưng tôi không thể tìm thấy câu trả lời ở bất cứ đâu. Có vẻ như nó nên quá rõ ràng. Đôi khi, khi tôi gõ một lệnh xấu trong thiết bị đầu cuối bash, con trỏ chỉ nhảy xuống dòng tiếp theo mà không có bất kỳ lỗi hay bất cứ điều gì. Tôi không thể nói những gì tôi đã làm sai. Nó giống như tôi bị mắc kẹt trong chương trình. Tái hiện:

$ tidy

Tôi: "Rất tiếc! Đó không phải là ý tôi gõ ..."

:q

Tôi: "Điều đó không hiệu quả ..."

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

Tôi biết tôi đã làm rối nhưng làm cách nào để quay lại dấu nhắc mà không đóng thiết bị đầu cuối?



:qthực sự làm việc cho tôi; đó không phải là lệnh Vim sao?
Hạt đậu đỏ

Câu trả lời:


53

Bạn luôn có thể thử những thứ rõ ràng như ^C, ^D(eof), Escape, v.v., nhưng nếu thất bại, tôi thường sẽ tạm dừng lệnh bằng ^Z(Control-Z) để đưa tôi trở lại vỏ.

Sau đó, tôi thực hiện một pslệnh và lưu ý lệnh PID (id quá trình) của lệnh và sau đó đưa ra lệnh kill thePID( kill -9 thePIDnếu trước đây không hoạt động) để chấm dứt ứng dụng.

Lưu ý rằng đây không phải là một cách gọn gàng (không có ý định chơi chữ) để chấm dứt ứng dụng / lệnh và bạn có nguy cơ có thể không lưu một số dữ liệu, v.v.

Một ví dụ (tôi đã sử dụng tidynhưng tôi chưa cài đặt 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

8
Đó là nó!! ^ Z đến giải cứu. Cảm ơn bạn rất nhiều.
David Kennedy

3
^ \ (ctrl-backslash, SIGQUIT) hoạt động trong một số tiện ích cứng đầu không đáp ứng với ^ C.
mrb

2
Suỵt Đừng nói với mọi người về ^ \ hoặc họ cũng sẽ bắt đầu SIG_IGN, vậy chúng ta sẽ làm gì?
Alan Curry

1
@godlygeek Bạn có thể cho tôi biết %% có nghĩa là gì trong Linux hoặc nó là loại gì không? Tôi đã tìm kiếm rất nhiều.
Noumenon

1
@Noumenon, hãy xem LESS='+/^JOB CONTROL' man bash. %%đề cập đến "công việc hiện tại".
tự đại diện

12

Hãy thử nhấn Ctrl- Dhoặc Ctrl- C. Nếu thất bại, giết quá trình.

Cố gắng với tidylệnh bạn đã đề cập, Ctrl- Dhoạt động.


CTRL+Ccũng tốt cho windows CMD.
T.Todua

7

Một giải pháp khác (chưa được đề cập) là gửi SIGQUITtín hiệu bằng ctrl+\

mạnh hơn ctrl+c


2

CTRL+D == exit shell command

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

Tất nhiên, họ sản xuất kernel signalnếu bạn muốn biết thêm, đọc:

man 7 signal

3
Ctrl + D là phần cuối của tệp, không thoát trực tiếp.
Gilles 'SO- ngừng trở thành ác quỷ'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.