Посмотрите на вашу конфигурацию, если установлены переменные 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 последовательных ударов этого.