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

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

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

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

5 ответов

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

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

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

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

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

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

И, как вы спрашиваете о "всей системы":

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

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

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

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

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

Your Ubuntu will lock you out if you screw up the $PATH внутри /etc/environment by trying to append new path

PATH=$PATH:/new_path

If your Ubuntu Gnome or Unity login page failed in letting you in without complaining wrong password. And you have recently modified /etc/environment, it's most likely the case.

A fix is to login virtual console CTRL+ALT+F1 login console, manually check $PATH, and fix /etc/environment файл.

According to this, /etc/environment is loaded by PAM stack, which populates environment variable line by line.

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

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