файлы оболочки и * rcs: что такое нормальная настройка?

587
kch

Пользователь баш будет в конечном итоге с .bashrc, .bash_profile, .profileи, возможно, некоторые другие.

Теперь каждый файл загружается в определенных ситуациях, и все это приводит к путанице и разочарованию. Меня не волнует, какая оболочка является оболочкой входа в систему, и вы не должны.

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

Итак, каков разумный способ их настроить?

Я бы поспорил, что нужно заняться не специфичными для bash вещами .profile, а некоторыми источниками файлов, другими и т. Д. Что именно нужно было бы вставить в каждый из них, чтобы добиться идентичной среды для каждой оболочки?

Примечание: я не спрашиваю, что вам особенно нравится помещать в ваши rc-файлы, например, псевдонимы и функции и так далее. Точно так же, как вы их выкладываете так, чтобы между ними не было случайного слияния.

4
У меня есть замечательная книга «От Bash до Z Shell», и я знал просто идеальный способ выбраться из ада инициализации оболочки, но это все беспорядочно и случайно, и, ну, я не могу вспомнить вещи, которые этого не делают имеет смысл. kch 15 лет назад 0
Но некоторые команды, если они выполняются в нетерминальной удерживающей оболочке, могут сделать невозможным вход в эту учетную запись. Kent Fredric 15 лет назад 0
Я бы хотел пример. Во всяком случае, я уверен, что в этом случае он может быть пропущен в соответствующем файле, чтобы не запускаться, когда он не должен. kch 15 лет назад 1
Одним из примеров могут быть проблемы с rsync: http://www.samba.org/rsync/FAQ.html#3 innaM 15 лет назад 0

2 ответа на вопрос

4
Ludwig Weinzierl

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

Если вы действительно этого хотите, поместите все ~/.profileи добавьте source ~/.profileв конце своего ~/.bashrc. Если это желательно, это другой вопрос. Для источника ~/.profileв ~/.bashrcочень обычное дело в любом случае.

+ ------------ + ----------------- + ------------------ - + | | логин оболочки | интерактивные оболочки | + ------------ + ----------------- + ------------------ - | | все | / etc / profile | | | бурниш | ---------------- + -------------------- | | ракушки | ~ / .profile | | + ------------ + ----------------- + ------------------ - | | просто | ~ / .bash-профиль | /etc/bash.bashrc | | | ------------------------------------- | | Баш | ~ / .bash-login | ~ / .bashrc | + ------------ + ----------------- + ------------------ - + 

Оболочка C и производные оболочки используют другой набор файлов (.login, .cshrc, ..).

Что именно должно быть в каждом из них, чтобы создать одинаковую среду для каждой оболочки?

Если вы имеете в виду окружение в смысле переменных окружения, просто установите все из них в ~ / .profile, и все в порядке. Если вы имеете в виду среду в более широком смысле, это зависит.

Проблема здесь в том, что нежелательно иметь одинаковую среду для интерактивных оболочек и оболочек входа в систему. Примером могут служить псевдонимы: возможно, вам нужны псевдонимы в вашей интерактивной оболочке, но очень вероятно, что они заставят ваши скрипты делать странные вещи. Таким образом, вы не хотите, чтобы ваши псевдонимы в неинтерактивных оболочках => вставляли их ~./bashrc.

Насколько я понимаю, .profile будет также загружен sh, а .bash_profile - просто bash, поэтому вы не должны помещать вещи, которые работают только в bash, в .profile. Итак, я на самом деле помещаю большинство вещей в .profile, некоторые в .bashrc, а источники в обоих .bash_profile. Имеет смысл? kch 15 лет назад 0
Хотя этот ответ не помогает напрямую, он вдохновил меня на мысль: «Как насчет создания бессмысленного файла, который ничего не распознает, такого как ~ / .my_shell_conf, а затем просто исходного кода его с помощью различных сценариев оболочки, где это имеет смысл» Kent Fredric 15 лет назад 0
@ksh: имеет смысл абсолютно. Ludwig Weinzierl 15 лет назад 0
@Kent Frederic: Я согласен, но я думаю, что в конечном итоге вы получите свой ~ / .my_shell, откуда я и получаю ~ / .profile. Ludwig Weinzierl 15 лет назад 0
Оболочки C также читают файлы ~ / .cshrc. Jonathan Leffler 15 лет назад 1
@ Джонатан Леффлер: Ответ обновлен. Ludwig Weinzierl 15 лет назад 0
0
Jonathan Leffler

Я исправляю вещи так, что почти все мои настройки выполняются с помощью оболочки входа в систему и почти ничего на основе каждой оболочки. Это означает, что мой .profileфайл сложный; мой .kshrcфайл (аналог .bashrcдля Bash и .cshrcдля оболочки C) не существует. Я никогда не считал это проблемой. Это также означает, что не входящие в систему оболочки являются настолько быстрыми, насколько это возможно - они не копаются в файлах для анализа команд, которые они не будут использовать. Это может быть похмелье со времен оболочки Bourne - когда не было сценариев для каждой оболочки. Но я никогда не находил ничего такого, что требовало бы такого специализированного лечения.

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