Есть ли способ удалить, ^Cкогда вы нажмете CTRL+ Cв оболочке, включенной с Red Hat Enterprise Linux 6 («Сантьяго»)? У меня есть разрешение на редактирование своего .bash_profile.
Отредактируйте (или создайте) свой ~/.inputrcфайл. Добавьте строку, говоря
set echo-control-characters Off
Это даст указание библиотеке GNU Readline (которую использует Bash) не выводить (отображать) какие-либо управляющие символы на экран. Этот параметр будет активен во всех новых сеансах Bash после этого (и в любой другой утилите, которая использует библиотеку Readline).
Обратите внимание, что если ваша система Unix поставляется с общесистемным файлом конфигурации для библиотеки Readline (обычно /etc/inputrc), то ваш личный файл конфигурации должен будет включать этот файл:
$include /etc/inputrc
set echo-control-characters Off
Другая альтернатива - сделать личную копию общесистемного файла конфигурации, а затем изменить его.
Привет, я проверил это, и он работает нормально, но когда я прерываю работающую команду bash, она не работает, например, sleep 180и
нажимаю
@ Ten-Coin Это будет работать, только если команда, к сожалению, использует библиотеку Readline.
Кусалананда
1
Если он ~/.inputrcеще не существует, простое создание файла может привести к потере некоторых существующих настроек. В моем случае я впервые заметил, что ctrl + left и ctrl + right перестали работать. Исправление было начать ~/.inputrcс этой строки $include /etc/inputrc. Также можно просто cp /etc/inputrc .inputrcи отредактировать по желанию.
kasperd
2
@kasperd Хорошая мысль! Я не знал, что добавление личного файла конфигурации приведет к отключению чтения общесистемного файла конфигурации (в моей системе его нет). Я обновлю свой ответ.
Если вы хотите, чтобы это изменение было постоянным (и вы используете, bashкак подразумевается в вашем вопросе), то лучше добавить его, .bashrcкак отмечено в комментариях jlmg (так, что оно применимо ко всем интерактивным оболочкам).
+1 В отличие от решения readline, это должно работать для большинства, если не для всех вещей, работающих в терминале.
JoL
1
Вероятно, следует упомянуть, что он не будет работать на всех терминалах, если его вставить, .bash_profileпоскольку этот файл анализируется только оболочками входа в систему. .bashrcВместо этого его следует ввести , чтобы он читался всеми интерактивными вызовами.
JoL
1
Не по-прежнему ли это повторяет необработанный байт 0x03, который теоретически может быть интерпретирован некоторыми терминалами? Это также будет иметь побочные эффекты, если вы будете выполнять такие вещи, как выполнение команды без ^[[A
чтения строки
1
@ Random832 +1 Ты прав. Я предполагаю, что установка просто плохо названа; он не контролирует отображение управляющих символов, а скорее перевод их в печатные символы перед отображением. Чтобы предотвратить этот побочный эффект, вам бы stty -echoтоже пришлось . Это, конечно же, предотвратит повторение всего остального, что, вероятно, делает этот ответ бездействующим, если все, что вы хотели - это скрыть ^Cs.
JoL
1
@jlmg Если бы ^Cвсегда было в конце, я мог бы согласиться с тобой. Но ^Cон будет напечатан там, где когда-либо находился курсор, который может перезаписать пару символов в любом месте команды. Это означает, что если вам нужно скопировать и вставить части этой команды, у вас может получиться что-то искаженное. И ^Cпри просмотре терминала не так легко распознать, как если бы он был в конце команды.
kasperd
2
Если вы пытаетесь найти конфигурацию, которая позволит нормально отображать эхо (в том числе echoctl) и просто отключить эхо-сигналы генерирующих сигнал символов, и вы уверены, что это должно быть возможно, потому что вы видели, как это работало раньше ...
Вы, наверное, видели это таким образом. Но это больше невозможно из-за этого коммита :
commit 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 файла drivers / tty / n_tty.c .
set echo-control-characters off
Ответы:
Отредактируйте (или создайте) свой
~/.inputrc
файл. Добавьте строку, говоряЭто даст указание библиотеке GNU Readline (которую использует Bash) не выводить (отображать) какие-либо управляющие символы на экран. Этот параметр будет активен во всех новых сеансах Bash после этого (и в любой другой утилите, которая использует библиотеку Readline).
Обратите внимание, что если ваша система Unix поставляется с общесистемным файлом конфигурации для библиотеки Readline (обычно
/etc/inputrc
), то ваш личный файл конфигурации должен будет включать этот файл:Другая альтернатива - сделать личную копию общесистемного файла конфигурации, а затем изменить его.
источник
sleep 180
и~/.inputrc
еще не существует, простое создание файла может привести к потере некоторых существующих настроек. В моем случае я впервые заметил, что ctrl + left и ctrl + right перестали работать. Исправление было начать~/.inputrc
с этой строки$include /etc/inputrc
. Также можно простоcp /etc/inputrc .inputrc
и отредактировать по желанию.Попробуйте следующее:
Для объяснения см. Этот великий и подробный пост от Стефана Шазеля, который также объясняет некоторые другие
stty
особенности .Если вы хотите, чтобы это изменение было постоянным (и вы используете,
bash
как подразумевается в вашем вопросе), то лучше добавить его,.bashrc
как отмечено в комментариях jlmg (так, что оно применимо ко всем интерактивным оболочкам).источник
.bash_profile
поскольку этот файл анализируется только оболочками входа в систему..bashrc
Вместо этого его следует ввести , чтобы он читался всеми интерактивными вызовами.^[[A
stty -echo
тоже пришлось . Это, конечно же, предотвратит повторение всего остального, что, вероятно, делает этот ответ бездействующим, если все, что вы хотели - это скрыть^C
s.^C
всегда было в конце, я мог бы согласиться с тобой. Но^C
он будет напечатан там, где когда-либо находился курсор, который может перезаписать пару символов в любом месте команды. Это означает, что если вам нужно скопировать и вставить части этой команды, у вас может получиться что-то искаженное. И^C
при просмотре терминала не так легко распознать, как если бы он был в конце команды.Если вы пытаетесь найти конфигурацию, которая позволит нормально отображать эхо (в том числе
echoctl
) и просто отключить эхо-сигналы генерирующих сигнал символов, и вы уверены, что это должно быть возможно, потому что вы видели, как это работало раньше ...Вы, наверное, видели это таким образом. Но это больше невозможно из-за этого коммита :
Если вы с любовью вспоминаете, как Linux не повторял это
^C
, единственный способ вернуть старое поведение - это исправить ваше ядро. В последних версиях отображение символов, генерирующих сигналы, находится в строках 1215-1218 файла drivers / tty / n_tty.c .источник