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

39

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

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

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

    
задан trapaank 14.06.2012 в 14:56
источник

5 ответов

35

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

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

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

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

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

    
ответ дан roadmr 14.06.2012 в 15:43
15

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

    
ответ дан André Stannek 14.06.2012 в 15:44
6

И как вы спрашиваете о системе в целом :

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

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

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

    
ответ дан Izzy 15.06.2012 в 17:27
3

Помимо широкомасштабного и широкомасштабного обсуждения в рамках системы, наиболее существенным отличием является /etc/environment not скрипт, отличный от ~/.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, который заполняет переменную среды по строкам.

    
ответ дан legendbb 11.09.2012 в 16:09
-1

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

    
ответ дан Pranit Bauva 14.06.2012 в 16:13