Как выйти или отменить неверную команду bash?


41

Я ожидаю, что получу некоторую надбавку за это, но нигде не могу найти ответ. Кажется, это должно быть так очевидно. Иногда, когда я набираю неверную команду в терминале bash, курсор просто переходит на следующую строку без каких-либо ошибок или чего-либо еще. Я не могу сказать, что я сделал не так. Как будто я застрял в программе. воссоздание:

$ tidy

Я: "Упс! Это не то, что я хотел напечатать ..."

:q

Я: "Это не сработало ..."

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

Я знаю, что облажался, но как мне вернуться к приглашению, не закрывая терминал?



:qна самом деле работал для меня; Разве это не команда Vim?
Красный горох

Ответы:


53

Вы всегда можете попробовать очевидные вещи , как ^C, ^D(ВФ), побег и т.д., но если все терпит неудачу , я обычно в конечном итоге подвешивания команду с ^Z(Control-Z) , который ставит меня обратно в оболочку.

Затем я делаю psкоманду и отмечаю PID (идентификатор процесса) этой команды, а затем выдаю kill thePID( kill -9 thePIDесли первая не работала) команду для завершения приложения.

Обратите внимание, что это не аккуратный (не каламбур) способ завершить приложение / команду, и вы рискуете, возможно, не сохранить некоторые данные и т. Д.

Пример (я бы использовал, tidyно он не установлен):

$ 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
Это оно!! ^ Z на помощь. Огромное спасибо.
Дэвид Кеннеди

3
^ \ (ctrl-backslash, SIGQUIT) работает в некоторых упрямых утилитах, которые не реагируют на ^ C.
mrb

2
Тсс! Не говорите людям о ^ \, или они SIG_IGNтоже начнут это делать, тогда что мы будем делать?
Алан Карри

1
@godlygeek Можете ли вы сказать мне, что означает %% в Linux или что это такое? Я много искал.
Нумен

1
@ Нуменон, посмотри LESS='+/^JOB CONTROL' man bash. %%относится к «текущей работе».
Wildcard

12

Попробуйте нажать Ctrl- Dили Ctrl- C. Если это не удастся, убить процесс.

Попытка с tidyкомандой, которую вы упомянули, Ctrl- Dработает.


CTRL+Cхорошо для окон CMD тоже.
Т.Тодуа

7

Другое решение (не упомянутое уже) состоит в том, чтобы послать SIGQUITсигнал, используя ctrl+\

Это сильнее чем ctrl+c


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.