Вот содержимое акции, ~/.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 делает это, чего мне не хватает?
-n "$BASH_VERSION"
быть правдой за пределами Баш?.profile
источник.bashrc
, это не так во всех версиях Linux, и мне интересно, каково его обоснование.Ответы:
Это исходное решение от Debian. Обоснование этого объясняется в этом очень хорошем вики-посте , выдержка которого приведена ниже. Резюме сводится к тому, чтобы «гарантировать, что логины GUI и не GUI работают одинаково»:
источник
Это стандартное поведение Ubuntu, это
~/.bashrc
файл запуска на уровне пользователя для каждой интерактивной оболочки. Когда вы в основном открываете терминал, вы запускаете не входящую в систему интерактивную оболочку, которая считывает~/.bashrc
и~/.bashrc
получает содержимое и экспортируется в текущую среду оболочки. Это помогает получить все свои пользовательские переменные и функции оболочки в текущей оболочке. Также вы можете найти такие строкичтобы получить пользовательские псевдонимы в текущей среде оболочки.
Это важно для обеспечения хорошего пользовательского опыта. Например , один может хранить прокси удостоверение в системе
.bashrc
, если она не получить ни один из источников терминальных приложений ( а именно ,ping
,wget
,curl
, иlynx
т.д.) будет работать должным образом. Или вы должны предоставлять учетные данные прокси каждый раз, когда открываете терминал.Кроме того, Ubuntu по умолчанию
.bashrc
содержит много удобных для пользователя псевдонимов (дляls
иgrep
для вывода цветного вывода), много новых определений для различных переменных оболочки, что повышает удобство работы с пользователем.Но в случае входа в систему через ssh или входа в виртуальную консоль , вы получаете интерактивную оболочку входа. Там файл инициализации оболочки есть
~/.profile
. Следовательно, если вы не используете источник,~/.bashrc
вы пропустите все эти полезные настройки в вашем.bashrc
. Вот почему~/.profile
исходный код Ubuntu по умолчанию~/.bashrc
Дело, чтобы избежать
~/.profile
форму изнутри~/.bashrc
в то же время, когда~/.bashrc
ее получают~/.profile
. Это создаст бесконечный цикл ситуации, и в результате ваш запрос терминала будет приостановлен, если вы не нажмете Ctrl+ C. В такой ситуации, если вы поставите строку в~/.bashrc
Затем вы можете увидеть, что файловый дескриптор останавливается при открытии терминала.
источник
.profile
источники.bashrc
? SuSe Enterprise 10 этого не делает, равно как и ни одна из версий Fedora, которые я использовал, но это было много лет назад, я могу ошибаться. CentOS 5.8 делает как ни странно. Во всяком случае, вы видите мою точку зрения? Это выбор дизайна, и мне интересно, почему он был сделан..bashrc
или в.bash_aliases
. Например, у меня есть псевдонимls
какls --color=auto
в моем,.bashrc
и мой.bashrc
был получен из моего.profile
. Здесь я могу использовать псевдоним даже из ssh. Или я мог бы использовать прокси в сеансе SSH. Если я не получу источник.bashrc
от.profile
меня, я потеряю эти функции. Я думаю, что это все о лучшем пользовательском опыте..bashrc
исправляют это. Но это также вызывает проблемы, я помню, как в первый раз, когда я использовал систему, которая имела такое поведение, я продолжал получать эти странные сообщения при обращенииssh
к нему, потому что я использовалxset b off
в своем,.bashrc
который использовал для отключения звонка терминала, но только в системе X, так что давал сообщения об ошибках. Мне понадобилось много времени, чтобы понять, что происходит, так как я не думал, что.bashrc
это будет прочитано при запуске оболочки входа в систему. Мне просто интересно, есть ли официальное заявление по этому поводу.