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

Это содержимое запаса ~/.profile , в котором были удалены мои 13.10 (закомментированные строки ):

если [-n "$BASH _ВЕРСИЯ" ]; тогда если [-f "$HOME/.bashrc" ]; тогда. "$HOME/.bashrc" фи фи если [-d "$HOME/bin" ] ; тогда PATH="$HOME/bin :$PATH" фи 

Это унаследовано от Debian, но почему Canonical решила сохранить его? Насколько я знаю, это не стандартный *nix-способ, и я видел различные системы, в которых этого не происходило, поэтому я предполагаю, что у них должна быть веская причина для этого. Это может привести к непредвиденному поведению при запуске оболочек входа в систему (, например, при подключении по ssh к машине, например ), где пользователь не ожидает ~/.bashrc .

Единственное преимущество, о котором я могу думать, это не путать пользователя со многими файлами запуска и позволить им редактировать .bashrc в одиночку и читать это независимо от типа оболочки. Это, однако, сомнительное преимущество, поскольку часто полезно иметь разные настройки для входа в систему и для интерактивных оболочек, и это мешает вам это сделать. Кроме того, оболочки входа в систему очень часто не запускаются в графическом окружении, что может привести к ошибкам, предупреждениям и проблемам (о боже! )в зависимости от того, что вы установили в этих файлах.

Итак, почему Ubuntu делает это, что мне не хватает?

30
04.08.2014, 06:25
1 ответ

Это стандартное поведение Ubuntu, ~/.bashrc— это уровень пользователя -для -интерактивного -файла запуска оболочки. Когда вы открываете терминал, в основном вы запускаете не -логин, интерактивную оболочку который читает ~/.bashrc, а содержимое ~/.bashrcизвлекается и экспортируется в вашу текущую среду оболочки. Это помогает получить все его пользовательские переменные оболочки и функции в текущей оболочке. Также вы можете найти такие строки

if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi 

для получения пользовательских псевдонимов в текущей среде оболочки.

Это также важно для обеспечения хорошего пользовательского опыта. Например, учетные данные прокси-сервера можно хранить в .bashrc, если только они не будут получены ни одним из терминальных приложений (. а именно , ping, wget, curl, lynxи т. д. )будут работать правильно. Или вам нужно предоставлять учетные данные прокси-сервера каждый раз, когда вы открываете терминал.

Кроме того, Ubuntu по умолчанию .bashrcсодержит множество удобных для пользователя псевдонимов (для lsи grepдля распечатки раскрашенного вывода ), много новых определений для различных переменных оболочки, которые улучшают взаимодействие с пользователем.

Но в случае вашего входа по ssh или входа в виртуальную консоль вы в основном получаете интерактивную оболочку входа. Там файл запуска оболочки ~/.profile. Следовательно, если вы не используете источник ~/.bashrc, вы пропустите все эти полезные настройки в своем .bashrc. Вот почему источник Ubuntu по умолчанию ~/.profile~/.bashrc

Случай, которого следует избегать

  • вы никогда не должны получать форму ~/.profileвнутри ~/.bashrcв то же время, когда ~/.bashrcпоступает из ~/.profile. Это создаст бесконечный цикл ситуации, и в результате ваше приглашение терминала будет приостановлено, если вы не нажмете Ctrl + C . В такой ситуации, если вы поместите строку в свой ~/.bashrc
set -x

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

3
11.22.2019, 23:48
  • 1
    Спасибо, это все правдивая и полезная информация. Это просто не относится к моему вопросу. Я знаком с различиями между оболочками входа и входа без -. Мой вопрос: почему в системах Ubuntu `.profile `sourcing `.bashrc `? SuSe Enterprise 10 этого не делает, как и ни одна из версий Fedora, которые я использовал, но это было много лет назад, я могу ошибаться. CentOS 5.8 делает это как ни странно. В любом случае, вы понимаете мою точку зрения? Это выбор дизайна, и мне интересно, почему это было сделано. –  terdon 03.11.2014, 01:33
  • 2
    Я не использовал строго другие дистрибутивы Linux, которые вы назвали. можете ли вы рассказать мне, как они обрабатывают такие ситуации, как псевдонимы команд в сеансе ssh, которые определены в `.bashrc `или в `.bash _псевдонимы `. Например, у меня есть псевдоним для `ls `как `ls --color=auto `в моем `.bashrc `, а мой `.bashrc `получил источник из моего `.профиль `. Здесь я могу использовать псевдоним даже из ssh. Или я мог бы использовать прокси в сеансе ssh. Если я не получу свой `.bashrc `из `.profile `, я потеряю эти функции. Я думаю, что все дело в лучшем пользовательском опыте. –  sourav c. 03.11.2014, 01:57
  • 3
    Они не работают, эти псевдонимы не будут работать. И да, источник `.bashrc `исправляет это. Но это также вызывает проблемы, я помню, когда я впервые использовал систему с таким поведением, я продолжал получать эти странные сообщения, когда `ssh `подключался к ней, потому что я использовал `xset b off `в мой `.bashrc `, который раньше отключал терминальный звонок, но только в системе X, поэтому выдавал сообщения об ошибках. Мне потребовались годы, чтобы понять, что происходит, так как я не думал, что `.bashrc `будет прочитан при запуске оболочки входа в систему. Мне просто интересно, есть ли "официальное" заявление по этому поводу. –  terdon 03.11.2014, 02:05
  • 4
    Я с тобой согласен. Я также столкнулся с [некоторыми проблемами ранее] (http://askubuntu.com/q/369830/127327). Но в основном это полезно и удобно для пользователя, если вы помните и избегаете нескольких особых случаев. Не так ли :) –  sourav c. 03.11.2014, 02:16
  • 5
    Да, на это есть веские причины. Мне просто было любопытно, объясняла ли когда-либо Canonical свое решение о сохранении этого вышестоящего решения. –  terdon 03.11.2014, 02:24
  • 6
    Я только что наткнулся на дело `, чтобы косвенно избежать дела `. `.bash _rc `источники `.bash _профиль `, который, в свою очередь, источники `.profile `Я понятия не имею, что вызвало это, поскольку я использую ZSH вместо BASH, но я подозреваю, что к этому приложил руку Ruby RVM. –  karatedog 10.10.2014, 12:14

Теги

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