Ctrl D не выходит из bash после получения bashrc

309
MayeulC

Не bashrcбыл написан мной, и в источниках много разных конфигурационных файлов. Получив это, я больше не могу выходить из bash с Ctrl+ D.

Я нашел этот связанный вопрос о Zsh, и я хотел бы знать механизм, используемый для того же сделать с Bash.

При вводе Ctrl+ Dв оболочке входа в систему я получаю:

Используйте «выход», чтобы покинуть оболочку.

Когда в оболочке не для входа в систему,

Используйте «выход», чтобы покинуть оболочку.

Поскольку эти сообщения переводятся в зависимости от используемой локали, это, вероятно, не системный скрипт. Я хотел бы контролировать оба независимо, если это возможно (отключите эту функцию, например, для оболочек без входа в систему). Это возможно?

1
Должен ли этот вопрос быть перенесен в Unix и Linux? Я не очень знаком с правилами SU. MayeulC 6 лет назад 0

1 ответ на вопрос

3
ischeriad

Посмотрите на вашу конфигурацию, если установлены переменные bash или параметры оболочки:

Переменные Bash

( Раздел 5.2 в Справочном руководстве Bash)

IGNOREEOF

Управляет действием оболочки при получении символа EOF в качестве единственного ввода. Если установлено, значение обозначает количество последовательных символов EOF, которые могут быть прочитаны как первый символ в строке ввода до выхода из оболочки. Если переменная существует, но не имеет числового значения (или не имеет значения), по умолчанию используется значение 10 . Если переменная не существует, EOF обозначает конец ввода в оболочку. Это действует только для интерактивных оболочек.

Например IGNOREEOF=2


Модификация поведения оболочки: встроенный набор

set позволяет изменять значения параметров оболочки

( Раздел 4.3.1 в Справочном руководстве Bash)

-o ignoreeof

Интерактивная оболочка не завершится после чтения EOF.


Как добраться до вашего вопроса

Я хотел бы контролировать оба независимо, если это возможно (отключите эту функцию, например, для оболочек без входа в систему). Это возможно?

Да. Сценарии, которые вы используете, должны проверить, является ли оболочка оболочкой входа в систему, и соответственно установить переменную, примерно так:

if shopt -q login_shell; then IGNOREEOF=10; else IGNOREEOF=0; fi 

Обратите внимание, что значение 10все еще позволяет вам покинуть оболочку с Ctrl+ D; вам просто нужно 11 последовательных ударов этого.

Идеальный ответ. Я просто добавлю, что опции обычно запрашиваются через `shopt`:` shopt -o ignoreeof`. Кажется, что все, что делают `set -o ignoreeof` и` set + o ignoreeof`, это `IGNOREEOF = 10` и` unset IGNOREEOF`. MayeulC 6 лет назад 0