В странице справочника Bash говорится:
После чтения того файла (/etc/profile), это ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в том порядке, и читает и выполняет команды от первой, которая существует и читаема.
Таким образом, если у меня есть оба a ~/.bash_profile
и a ~/.profile
, только первое будет выполнено.
Поскольку я часто совместно использую ДОМ между различными системами, у меня есть оба, трудно связанные. На 18.04.2 вход в систему возвращается к экрану входа в систему. С каждым как отдельный, но идентичный файл происходит то же. Совместно использовать между системами и доступными оболочками мой .profile
содержит a case
оператор на основе $0
, установка как соответствующая или выполнение предпочтительной оболочки. Эффективно это делает:
case $0 in
*bash) ... some stuff ...
;;
*) exec /bin/bash -il
;;
esac
Помещение a #
перед exec
в .profile
копия и все работы хорошо...
.bash_profile
идентично (кроме #
в .profile
когда я вставляю один).
Оказывается, что 18.04.2 довольно довольно этим exec
в ~/.bash_profile
, но не в ~/.profile
(который это не должно читать так или иначе). Когда это там, вход в систему берет пароль → черный экран кратко → окно входа в систему снова. Когда это комментируется, вход в систему происходит правильно. Также оболочка является Bash, так, чтобы ответвление случая не должно было быть взято также.
Мысли?
Процесс входа в систему GUI может получить /etc/profile
и ~/.profile
для установки переменных среды, и т.д., и это может использовать /bin/dash
или /bin/bash
для этого. Попросите, чтобы Ubuntu имела много экземпляров входа в систему GUI, переставшего работать из-за ошибок в ~/.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