різниця між файлом bash.bashrc та / etc / середовищем


42

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

Отже, в чому різниця між ними?

Я переглянув це, і виявив, що "bashrc використовується для конкретного користувача та середовища, для системи". Що мається на увазі під системою в цілому? /etc/bash.bashrcЯ думаю, також застосовується система змін у всьому світі. Виправте мене, якщо я помиляюся. Будь-яка допомога буде вдячна ..

Відповіді:


35

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

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

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

Дивіться це питання .

До речі, відповідь, яку ви знайшли через Google, схоже, стосується користувача ~/.bashrc, а не для системи /etc/bash.bashrc. Це може спричинити вашу плутанину.


яка мета ~ / .bashrc, коли є два файли, які роблять те саме / etc / Environment та /etc/bash.bashrc?
трапанк

6
/Etc/bash.bashrc виконується, якщо будь-який користувач відкриває баш. ~ / .Bashrc виконується лише у тому випадку, якщо власник домашнього каталогу, де він збережений, відкриває баш.
Андре Станек

18

/etc/environmentФайл встановлює змінну систему широкої для кожного користувача при завантаженні. Команди в the /etc/bash.bashrcare виконуються, якщо bashоболонку відкрив будь-який користувач. Таким чином, змінні не встановлюватимуться, якщо bashоболонка не буде відкрита принаймні один раз.


Вибачте, я новачок у Linux. коли буде відкрита оболонка bash? та інша річ, коли bash shell відкриється, чи буде вона заміняти змінну, встановлену в / etc / enviornment, чи ні?
трапанк

Я не впевнений, коли / etc / середовище точно виконано, але /etc/bash.bashrc виконується Ubuntu при введенні в робоче середовище. Ось чому це працює, якщо встановити там змінні. Я здогадуюсь, що / etc / середовище виконується один раз під час завантаження перед входом у робочий стіл і що виконання /etc/bash.bashrc замінює змінні. Але ще раз: я не впевнений у цьому.
Андре Станек

4
Це після входу, а не завантаження!
slm

6

А як ви запитуєте про " широку систему ":

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

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

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


3

Крім загальносистемного обговорення та широкого кола, одна з найбільш значущих відмінностей - /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, який заповнює змінну середовища по рядку.


-1

Різниця між ними полягає в тому, що /etc/enivironmentфайл буде працювати для всіх користувачів, тоді як файл bash.bashrc буде працювати лише для цього користувача. І якщо ви зробите щось неправильне у /etc/environmentфайлі, наслідки можуть бути серйозними, тоді як ви можете легко скасувати зміни у файлі bash.bashrc, скопіювавши вміст файлу / etc / environment. Але найперше перевага надається bash.bashrcфайлу, а потім файлу / etc / environment. Справа не в тому, що якщо ви внесете зміни у bash.bashrcфайл, то термінал надасть перевагу спочатку локальному файлу користувача (тобто bash.bashrc), а потім головному файлу (тобто /etc/environment).


Я думаю, що ви плутаєте файли ~ / .bashrc та /etc/bash.bashrc. Перший - локальний для користувача, який відкриває оболонку, другий - глобальний для всіх користувачів, що відкривають оболонку.
Денніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.