Как выйти или отменить неверную команду 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

Жиль Квено
источник
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

Конечно, они производят, kernel signalесли вы хотите узнать больше, читайте:

man 7 signal
Персидский залив
источник
3
Ctrl + D - конец файла, а не выход напрямую.
Жиль "ТАК - перестань быть злым"