Это содержимое запаса ~/.profile, которое появилось с моим 13.10 (прокомментированные строки удалены):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Это унаследовано от Debian, но почему Canonical решил сохранить его? Насколько я знаю, это не стандарт * nix, и я видел различные системы, где этого не произошло, поэтому я предполагаю, что у них, должно быть, были веские причины. Это может привести к неожиданному поведению при запуске оболочек входа (например, при входе в машину, например, когда пользователь не ожидает, что ~/.bashrc будет найден.
Единственное, что я могу придумать, - не путать пользователя со многими файлами автозагрузки и позволить им редактировать .bashrc самостоятельно и читать это независимо от типа оболочки. Это, однако, является сомнительной выгодой, поскольку часто бывает полезно иметь разные настройки для входа в систему и для интерактивных оболочек, и это блокирует вас от этого. Кроме того, оболочки входа в систему часто не запускаются в графической среде и могут вызывать ошибки и предупреждения и проблемы (о мой!) В зависимости от того, что вы установили в этих файлах.
Итак, почему Ubuntu это, чего мне не хватает?
Это стандартное поведение Ubuntu, ~/.bashrc - это начальный файл для каждого интерактивного запуска оболочки. Когда вы открываете терминал в основном, вы запускаете не-login, интерактивную оболочку, которая читает ~/.bashrc и содержимое ~/.bashrc, получает исходный код и экспортируется в текущую среду оболочки. Это помогает получить все свои пользовательские переменные и функции оболочки в текущей оболочке. Также вы можете найти строки, подобные этому
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
, чтобы получить переменные оболочки в текущей среде оболочки.
Это важно для обеспечения хорошего пользовательского опыта также. Например, можно хранить учетные данные прокси-сервера в .bashrc, если только он не получит источники ни одного из терминальных приложений (например, ping, wget, curl, lynx и т. Д.) Будет работать правильно. Или вы должны предоставлять учетные данные прокси каждый раз, когда вы открываете терминал.
Кроме того, по умолчанию .bashrc Ubuntu содержит много удобных для пользователя псевдонимов (для ls и grep для печати цветного вывода), много новых определения для разных переменных оболочки, что увеличивает пользовательский опыт.
Но в случае вашего входа в систему ssh или функции вы в основном получаете интерактивную оболочку входа. Там файл инициализации оболочки ~/.profile. Следовательно, если вы не используете ~/.bashrc, вы пропустите все эти полезные настройки в своем .bashrc. Поэтому исходный ~/.profile источник Ubuntu ~/.profile ~/.bashrc
ssh login
не должен выставлять ~/.profile внутри ~/.bashrc время, когда ~/.bashrc поступает из ~/.profile. Он создаст бесконечный цикл ситуации, и в результате ваше приглашение на терминал будет приостановлено, если вы не нажмете Ctrl + C. В такой ситуации, если вы поместите строку в свой ~/.bashrc set -xТогда вы можете видеть, что дескриптор файла останавливается при открытии терминала.