Ctrl + C не работает в gnome-терминале


9

На моем Linux-хосте Ctrl+ Cне работает, и я не знаю, как это сделать. Я использую Ubuntu 10.04 с bash 4.1.5 (1) и работаю в Gnome-терминале.

Когда я нажимал Ctrl+ Cво время работы этого скрипта, он не вызывал его выхода.

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done

2
Что вы подразумеваете под «не работает»? Где вы нажали эту клавишу, что вы ожидали, что на самом деле произошло?
Жиль "ТАК - перестань быть злым"

Может быть, вы можете описать более подробно, почему вы думаете, что Ctrl-C не работает - есть определенные вещи уровня ядра, которые не прерываются - например, процесс, зависающий в ожидании (неудачного) ответа NFS, часто не может быть прерван
Сорен

Я обновил свой ответ. По сути, Ctrl C не завершает сценарий, что, я думаю, должно быть прекращено при выполнении Ctrl C.
Анкур Агарвал

Содержит ли stty -aвыход intr=^C? Как вы запускаете скрипт?
Стефан Гименес

1
Пожалуйста, не пересылайте вопросы. Выберите сайт, о котором вы хотите спросить, и адаптируйте его для этого сайта.
nhinkle

Ответы:


9

Попробуй сделать это

$ stty sane

и посмотрите, решит ли это проблему, также проверьте, правильно ли задан intr, используя

$ stty -a

Если вы обнаружите, что intrустановлено что-то отличное от ^ C, то вы также можете исправить это, набрав

$ stty intr ^v^c

Это не помогло. stty -a показывает "intr = ^ C" (без кавычек)
Анкур Агарвал

Нужно ли вводить символ ^ или нажимать клавишу Ctrl?
Анкур Агарвал

вам просто нужно нажать клавишу Ctrl (^ это сокращение от Ctrl-)
Сорен

Может быть, вы можете описать более подробно, почему вы думаете, что Ctrl-C не работает - есть определенные вещи уровня ядра, которые не прерываются - например, процесс, зависающий в ожидании (неудачного) ответа NFS, часто не может быть прерван
Сорен

Я добавил больше деталей к моему вопросу. По сути, Ctrl C не завершает сценарий, который я запускаю, и я ожидаю, что он будет завершен с помощью Ctrl C.
Анкур Агарвал,

6

Поскольку он выглядит как неработающая gnome-terminalконфигурация, вы можете попытаться позволить ему восстановить настройки по умолчанию, используя

mv .gconf/apps/gnome-terminal{,-BROKEN}

(Вам нужно будет перезапустить терминал, чтобы увидеть эффекты.)

Если все в порядке после этого, сделайте rm -rf .gconf/apps/gnome-terminal-BROKEN.


4

Настройки по умолчанию в gnome-terminalСвязывает Ctrl-Cи Ctrl-Vключи , чтобы эмулировать поведение копирования и вставки из Windows. Это должна была быть функция, а не ошибка :)

Чтобы отключить это, на терминале gnome,

  1. перейдите к Menubar -> Edit -> Keyboard Shortcuts
  2. нажимайте Ctrl+ Cв столбце «Сочетание клавиш», пока не увидите New Accelerator....
  3. нажмите клавишу Backspaceили, Deleteчтобы отключить привязку клавиш
  4. убедитесь, что Disabledтеперь отображаются в столбце «Сочетание клавиш».

Обратите внимание, что это изменение вступит в силу немедленно на всех терминалах gnome.

Совет: gnome-terminal --show-menubarзаставит gnome-терминал отображать меню, если оно не отображается.


3

Я собираюсь сделать предположение здесь: Ctrl-C работает, но, поскольку выполнение ps -eзанимает много времени относительно остальной части скрипта, все, что вы делаете, это отправляете SIGINT процессу "ps". «ps» завершается, и сценарий запускает еще одну итерацию по циклическому коду.

Сделайте sleep 10в своем окне bash, пока оно работает, управляйте им. Посмотри, работает ли это. Если это так, запустите ваш оригинальный скрипт и управляйте им C несколько раз. Рано или поздно вам повезет, и процесс bash, который интерпретирует скрипт, получит SIGINT.


Ctrl C на 10 сна тоже не работает.
Анкур Агарвал

2
Таким образом, используя gnome-терминал, Ctrl C работает, а Ctrl c - нет. Таким образом, чтобы прервать сон 10, если я делаю Ctrl + Shift + C, это работает. Но Ctrl + C не работает. Почему это чувствительно к регистру.
Анкур Агарвал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.