`exec /bin/bash -il` завершается неудачей в.profile

На странице Bash написано:

После прочтения этого файла (/etc/profile) он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.

Так что, если у меня есть оба ~/.bash_profile и ~/.profileтолько первый будет запущен.

Потому что я часто разделяю HOME между разными системами, которые у меня жестко связаны. 18.04.2 логин возвращается на экран логина. С каждым отдельным файлом, но идентичным, происходит то же самое. Поделиться между системами и доступными оболочками моего .profile содержит case заявление на основе $0, настраивая соответствующим образом или выполняя предпочтительную оболочку. Эффективно это делает:

case $0 in
*bash) ... some stuff ...
;;
*) exec /bin/bash -il
;;
esac

Положить # перед exec в .profile копируй и все хорошо работает...

.bash_profile идентичен (кроме # в .profile когда я вставлю один).

Оказывается, 18.04.2 вполне доволен этим exec в ~/.bash_profile, но не в ~/.profile (который он не должен читать в любом случае). Когда это происходит, для входа требуется пароль → черный экран → окно входа снова. Когда это закомментировано, вход происходит правильно. Также оболочкой является Bash, так что ветвь кейса также не должна приниматься.

Мысли?

1 ответ

Решение

Процесс входа в систему GUI может исходить /etc/profile а также ~/.profile для настройки переменных среды и т. д., и он может использовать /bin/dash или же /bin/bash для этого. Спросите Ubuntu имеет много случаев неудачного входа в систему из-за ошибок в ~/.profile или же /etc/profile, Ты не должен быть execчто-то еще в этих файлах, по крайней мере, без проверки на интерактивное использование. Например, по умолчанию .bashrc имеет это наверху, которое вы могли бы адаптировать:

~ head /etc/skel/.bashrc 
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Другие вопросы по тегам