Почему исходный файл ~ / .profile по умолчанию Ubuntu ~ / .bashrc?

Это содержимое запаса ~/.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 это, чего мне не хватает?

1
задан 8 April 2014 в 19:25

1 ответ

Это стандартное поведение 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

Тогда вы можете видеть, что дескриптор файла останавливается при открытии терминала.

1
ответ дан 24 May 2018 в 10:56
  • 1
    Спасибо, это все правда и полезная информация. Это просто не касается моего вопроса. Я знаком с различиями между моделями входа и без входа. Мой вопрос в том, почему в системах Ubuntu есть .profile источник .bashrc? SuSe Enterprise 10 этого не делает, ни одна из версий Fedora, которые я использовал, но это было много лет назад, возможно, я ошибаюсь. CentOS 5.8 достаточно странно. В любом случае, вы видите мою мысль? Это выбор дизайна, и мне интересно, почему это было сделано. – terdon♦ 11 March 2014 в 09:33
  • 2
    Я не использовал строго других дистрибутивов Linux, которые вы назвали. можете ли вы рассказать мне, как они обрабатывают ситуации, такие как команды с псевдонимом в ssh-сессии, которые определены в .bashrc или в .bash_aliases. Например, у меня есть псевдоним для ls как ls --color=auto в моем .bashrc, а мой .bashrc получен из моего .profile. Здесь я могу использовать псевдоним даже из ssh. Или я мог использовать прокси-сервер в сеансе ssh. Если я не отправлю свой .bashrc из .profile, я потерял эти функции. Я думаю, что это все о лучшем опыте пользователей. – souravc 11 March 2014 в 09:57
  • 3
    Они этого не делают, эти псевдонимы не сработают. И да, источник .bashrc исправляет это. Но это также вызывает проблемы, я помню, как в первый раз, когда я использовал систему, у которой было такое поведение, я продолжал получать эти странные сообщения, когда ssh до него я использовал xset b off в своем .bashrc, который использовался для отключения терминала но только в системе X, поэтому он выдавал сообщения об ошибках. Потребовал меня, чтобы понять, что происходит, поскольку я не думал, что .bashrc будет прочитан при запуске оболочки входа. Мне просто интересно, есть ли «официальный». заявление об этом. – terdon♦ 11 March 2014 в 10:05
  • 4
    Я с тобой согласен. Я также столкнулся с некоторыми проблемами раньше . Но это в основном полезно и удобно, если вы помните и избегаете нескольких особых случаев. Не так ли :) – souravc 11 March 2014 в 10:16
  • 5
    Да, есть веские причины для этого. Мне было просто любопытно, действительно ли Канонич дал свое обоснование для сохранения этого решения. – terdon♦ 11 March 2014 в 10:24

Другие вопросы по тегам:

Похожие вопросы: