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