До даты, которую я использовал для установки переменных среды в файле bash.bashrc
. Недавно мне сказали использовать файл /etc/environment
. Ну, оба работают нормально.
Итак, в чем разница между ними?
Я погуглил это и обнаружил, что «bashrc используется для конкретного пользователя и среды, всей системы». Что подразумевается под широкой системой здесь? /etc/bash.bashrc
также применяет изменения в масштабе всей системы. Поправь меня, если я ошибаюсь. Мы будем благодарны за любую помощь.
Файл /etc/environment
устанавливает переменную всей системы для каждого пользователя при загрузке. Команды в /etc/bash.bashrc
выполняются, если оболочка bash
открыта любым пользователем. Таким образом, переменные не будут установлены, если оболочка bash
не будет открыта хотя бы один раз.
Разница между ними заключается в том, что файл /etc/enivironment
будет работать для всех пользователей, в то время как файл bash.bashrc будет особенно работать только для этого пользователя. И если вы делаете что-то не так в файле /etc/environment
, то последствия могут быть серьезными, в то время как вы можете легко отменить изменения в файле bash.bashrc, скопировав содержимое файла / etc / environment. Но первое предпочтение отдается файлу bash.bashrc
, а затем файлу / etc / environment. Дело не в том, что если вы вносите изменения в файл bash.bashrc
, то терминал будет сначала отдавать предпочтение локальному пользовательскому файлу (то есть, bash.bashrc
), а затем главному файлу (то есть, /etc/environment
).
Помимо общесистемного и пользовательского охвата, одно наиболее существенное отличие состоит в том, что /etc/environment
не сценарий, отличный от ~/.bashrc
.
Вы не можете разыменовать переменную внутри /etc/environment
, ее присваивание переменной принимает буквальное значение строки (как уже упоминалось roadmr).
Ваша Ubuntu заблокирует вас, если вы испортите $PATH
внутри /etc/environment
, пытаясь добавить новый путь
PATH=$PATH:/new_path
Если вашей странице входа в Ubuntu Gnome или Unity не удалось войти без жалуется на неправильный пароль. И вы недавно изменили /etc/environment
, это, скорее всего, так.
Исправление состоит в том, чтобы войти в виртуальную консоль CTRL kbd> + ALT kbd> + F1 kbd> в консоли входа, вручную проверить $PATH
и исправить /etc/environment
файл.
Согласно этому , /etc/environment
загружается стеком PAM, который пополняет переменную среды построчно.
И поскольку Вы спрашиваете о "в масштабе всей системы":
Конфигурационные файлы, расположенные в /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
файл.
Одно из отличий состоит в том, что /etc/environment
содержит только определения переменных и, по-видимому, не проходит никакого расширения / интерполяции переменных. Таким образом, вы не можете ссылаться на переменные в определениях. Это, например, не сработает:
A="else"
B="something $A"
B будет буквально something $A
, а не ожидаемым something else
.
См. этот вопрос .
Кстати, ответ, который вы нашли через Google, похоже, относится к пользователю ~/.bashrc
, а не к общесистемной /etc/bash.bashrc
. Это может быть причиной вашего замешательства.