Видаліть ^ C, коли CTRL + C


25

Чи є якийсь спосіб видалити, ^Cколи ви потрапили CTRL+ Cу оболонку, включіть Red Red Hat Enterprise Linux 6 ("Сантьяго")? Я маю дозвіл редагувати свій власний .bash_profile.


4
спробуйтеset echo-control-characters off
Sundeep

1
Я спробував, але не вийшло
Федерал Голд

Відповіді:


29

Відредагуйте (або створіть) свій ~/.inputrcфайл. Додайте рядковий вислів

set echo-control-characters Off

Це доручить бібліотеці ReadNline GNU (яку використовує Bash) не виводити (повторювати) жодних контрольних символів на екран. Налаштування буде активним у всіх нових сесіях Bash після цього (і в будь-якій іншій утиліті, яка використовує бібліотеку Readline).

Зауважте, що якщо ваша система Unix постачається з файлом конфігурації для всієї системи для бібліотеки Readline (як правило /etc/inputrc), то ваш особистий файл конфігурації повинен містити цей файл:

$include /etc/inputrc
set echo-control-characters Off

Іншою альтернативою є створення особистої копії загальносистемного файлу конфігурації та змінення цього.


Привіт, я перевірив це та його роботу добре, але коли я перервав запущену команду bash, вона не працювала, наприклад, sleep 180і натискаю CTRL + C
rɑːdʒɑ

@ Ten-Coin Він працюватиме лише тоді, коли команда, на жаль, використовує бібліотеку Readline.
Kusalananda

1
Якщо ~/.inputrcцього ще немає, просто створення файлу може втратити деякі існуючі налаштування. У моєму випадку я вперше помітив, що ctrl + зліва і ctrl + справа перестали працювати. Виправлення було почати моєму ~/.inputrcз цього рядка $include /etc/inputrc. Можна також просто cp /etc/inputrc .inputrcі редагувати за бажанням.
kasperd

2
@kasperd Добрий момент! Мені не було відомо, що додавання особистого файлу конфігурації призведе до відключення читання загальносистемного файлу конфігурації (у моїй системі його немає). Я оновлю свою відповідь.
Kusalananda

20

Спробуйте наступне:

stty -echoctl

Для пояснення дивіться цей чудовий та докладний пост від Стефана Шазеласа, який також пояснює деякі інші sttyособливості .

Якщо ви хочете зробити цю зміну постійною (і ви використовуєте так, bashяк це передбачається у вашому запитанні), тоді краще розмістити їх у вашому коментарі, .bashrcяк це зазначає jlmg (так це стосується всіх інтерактивних оболонок).


+1 На відміну від рішення readline, це повинно працювати для більшості, якщо не всіх речей, що працюють у терміналі.
JoL

1
Напевно, слід згадати, що він не працюватиме на всіх терміналах, якщо він буде розміщений, .bash_profileоскільки цей файл аналізується лише оболонками входу. Його слід вставити .bashrcзамість цього, щоб його читали усі інтерактивні виклики.
JoL

1
Невже це все ще не перегукнеться на необроблений байт 0x03, який теоретично може бути інтерпретований деякими терміналами? Це також матиме побічні ефекти, якщо ви виконуватимете такі дії, як виконання команди, що не ^[[A
читає лінії

1
@ Random832 +1 Ти маєш рацію. Я здогадуюсь, що налаштування просто погано названо; він не контролює відлуння контрольних символів, а швидше їх переклад на друковані символи перед повторенням. Щоб запобігти цьому побічному ефекту, вам також доведеться stty -echo. Це, звичайно, також запобігає відлунюванню всього іншого, що, ймовірно, робить цю відповідь недійсною, якщо все, що ви хотіли, було приховати ^C.
JoL

1
@jlmg Якби ^Cзавжди було в кінці, я можу погодитися з вами. Але ^Cзаповіт буде надруковано там, де колись був курсор, який може перезаписати пару символів у будь-якому місці команди. Це означає, що якщо вам потрібно скопіювати і вставити частини цієї команди, ви можете отримати щось зіпсований. І ^Cне так легко розпізнати при перегляді терміналу, як це було б, якби він був у кінці команди.
kasperd

2

Якщо ви намагаєтеся знайти конфігурацію, яка дозволить нормально відлунювати (в тому числі echoctl) і просто заглушити звучання сигналів, що генерують сигнал, і ви впевнені, що це повинно бути можливим, тому що ви бачили, що це працює так раніше ...

Ви, мабуть, бачили це саме так. Але це вже неможливо, через це зобов'язання :

фіксувати ec5b1157f8e819c72fc93aa6d2d5117c08cdc961

Увімкніть INTR / QUIT / SUSP, що лунає в рядковій дисципліні N_TTY (наприклад, ctrl-C з'явиться як "^ C", якщо встановлено stty echoctl, а ctrl-C встановлено як INTR).

Linux, здається, є єдиною unix-подібною ОС (нещодавно я перевірив це на Solaris, BSD та Mac OS X), який веде себе не так, і я дуже сумую за цим як хорошим візуальним підтвердженням переривання програми в консолі або xterm. Я це приємно пам’ятаю з багатьох Unix, якими я користувався також протягом багатьох років. Доведення цього до Linux також здається хорошим способом зробити його ще більш сумісним зі стандартною поведінкою, подібною до Unix.

Якщо ви приємно пам’ятаєте, як раніше Linux це не повторював ^C, єдиний спосіб повернути стару поведінку - це виправити ядро. В останніх версіях відлуння символів, що генерують сигнал, знаходиться у рядках 1215-1218 драйверів / tty / n_tty.c .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.