разница между файлом bash.bashrc и файлом / etc / environment

До даты, которую я использовал для установки переменных среды в файле bash.bashrc. Недавно мне сказали использовать файл /etc/environment. Ну, оба работают нормально.

Итак, в чем разница между ними?

Я погуглил это и обнаружил, что «bashrc используется для конкретного пользователя и среды, всей системы». Что подразумевается под широкой системой здесь? /etc/bash.bashrc также применяет изменения в масштабе всей системы. Поправь меня, если я ошибаюсь. Мы будем благодарны за любую помощь.

42
задан 2 September 2015 в 21:34

5 ответов

Файл /etc/environment устанавливает переменную всей системы для каждого пользователя при загрузке. Команды в /etc/bash.bashrc выполняются, если оболочка bash открыта любым пользователем. Таким образом, переменные не будут установлены, если оболочка bash не будет открыта хотя бы один раз.

0
ответ дан 2 September 2015 в 21:34

Разница между ними заключается в том, что файл /etc/enivironment будет работать для всех пользователей, в то время как файл bash.bashrc будет особенно работать только для этого пользователя. И если вы делаете что-то не так в файле /etc/environment, то последствия могут быть серьезными, в то время как вы можете легко отменить изменения в файле bash.bashrc, скопировав содержимое файла / etc / environment. Но первое предпочтение отдается файлу bash.bashrc, а затем файлу / etc / environment. Дело не в том, что если вы вносите изменения в файл bash.bashrc, то терминал будет сначала отдавать предпочтение локальному пользовательскому файлу (то есть, bash.bashrc), а затем главному файлу (то есть, /etc/environment).

0
ответ дан 2 September 2015 в 21:34

Помимо общесистемного и пользовательского охвата, одно наиболее существенное отличие состоит в том, что /etc/environment не сценарий, отличный от ~/.bashrc.

Вы не можете разыменовать переменную внутри /etc/environment, ее присваивание переменной принимает буквальное значение строки (как уже упоминалось roadmr).

Ваша Ubuntu заблокирует вас, если вы испортите $PATH внутри /etc/environment, пытаясь добавить новый путь

PATH=$PATH:/new_path

Если вашей странице входа в Ubuntu Gnome или Unity не удалось войти без жалуется на неправильный пароль. И вы недавно изменили /etc/environment, это, скорее всего, так.

Исправление состоит в том, чтобы войти в виртуальную консоль CTRL + ALT + F1 в консоли входа, вручную проверить $PATH и исправить /etc/environment файл.

Согласно этому , /etc/environment загружается стеком PAM, который пополняет переменную среды построчно.

0
ответ дан 2 September 2015 в 21:34

И поскольку Вы спрашиваете о "в масштабе всей системы":

Конфигурационные файлы, расположенные в /etc каталог относится ко всем пользователям в системе. Для /etc/bash.bashrc это значило бы для всех и всего, что это использует "Перенесенный Снова Оболочка" иначе Bash на той машине. Даже если Вы - единственный человек, использующий его, могли бы быть "технические пользователи", затронутые (просто смотрят в /etc/passwd и проверьте, как часто термин "/bin/bash" указан там - или использовать grep bash /etc/passwd | wc -l, который должен дать Вам что число непосредственно (значение: "захватите" все строки, содержащие строку "удар" из файла "/etc/passwd", и отправьте результаты (" | ") к команде "туалет" (подсчет слов) для подсчета строк ("-l").

Таким образом для Вашего пользователя, намного более безопасно изменить ~/.bashrc вместо этого (значение файла ".bashrc" - с ведущей точкой, да - в Вашем корневом каталоге, например. /home/ankur/.bashrc), который затем просто влияет на Вашего пользователя и оставляет все остальное в покое. Файлы в /etc должен только быть изменен, если изменения в масштабе всей системы действительно предназначаются.

Кроме того: Обе конфигурации будут использоваться, если они будут существовать. Во-первых, файл в масштабе всей системы (здесь: /etc/bash.bashrc) считан и "получен" (это - настройки, относился к текущей сессии), и затем пользователи /home/username/.bashrc обрабатывается то же, и таким образом может добавить к или даже измениться/перезаписать настройки от глобального /etc/bash.bashrc файл.

6
ответ дан 2 September 2015 в 21:34

Одно из отличий состоит в том, что /etc/environment содержит только определения переменных и, по-видимому, не проходит никакого расширения / интерполяции переменных. Таким образом, вы не можете ссылаться на переменные в определениях. Это, например, не сработает:

A="else"
B="something $A"

B будет буквально something $A, а не ожидаемым something else.

См. этот вопрос .

Кстати, ответ, который вы нашли через Google, похоже, относится к пользователю ~/.bashrc, а не к общесистемной /etc/bash.bashrc. Это может быть причиной вашего замешательства.

0
ответ дан 2 September 2015 в 21:34

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

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