Як я можу вийти або скасувати погану команду bash?


41

Я очікую, що я отримаю певну помилку за це, але відповіді я ніде не можу знайти. Здається, це повинно бути таким очевидним. Іноді, коли я набираю погану команду в баш-терміналі, курсор просто переходить до наступного рядка без жодної помилки чи нічого. Я не можу сказати, що я зробив не так. Наче я застряг у програмі. Реконструкція:

$ 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
@Noumenon, поглянь LESS='+/^JOB CONTROL' man bash. %%відноситься до "поточної роботи".
Wildcard

12

Спробуйте натиснути Ctrl- Dабо Ctrl- C. Якщо це не вдасться, вбийте процес.

Пробуючи tidyкоманду, яку ви згадали, Ctrl- Dпрацює.


CTRL+Cдобре для Windows 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 - це кінець файлу, не виходить безпосередньо.
Жил 'SO- перестань бути злим'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.