Встановлення глобальної змінної середовища для кожного


17

Якщо я встановлю змінну в /etc/environment, вона, здається, застосовується лише до адміністраторів під час роботи в sudo su.

Як я можу змусити змінні застосовуватись до всіх? Особливо, коли вони в терміналі? Чи /etc/enviromentне застосовуються настройки до bash?

Відповіді:


13

/etc/environmentОновлення буде працювати тільки на наступній сесії, вона автоматично не перезапускається.

Це означає, що ви не можете змінити це для сеансів, які вже розпочалися для інших користувачів.

Якщо ви хочете "перезавантажити" все, що є, /etc/environmentвам потрібна наступна команда:

source /etc/environment

Але знову-таки це працюватиме лише для вашого власного поточного сеансу, інші користувачі не впливатимуть, поки вони не розпочнуть новий сеанс або не запустять вищевказану команду в своєму сеансі.


4

TL; DR

Ці файли конфігурацій, будь то глобальні ( /etc/environment, /etc/profile) або специфічні для користувача ( ~/.profile, ~/.bashrc), обробляються лише під час наступного входу / сеансу.

У глобальних файлах застосовуються до всіх користувачів ( а не тільки корінь) ... але ви повинні перезапустити сеанс реєстрації , щоб побачити зміни , відображені в навколишньому середовищі. Це може статися, зателефонувавши, suяк ви зауважили ... або вийшовши / ввівшись чи перезавантажившись. Ви можете suскористатися некористувальним користувачем, і ви побачите, що в них також є зміни середовища.

Причина, чому вам потрібно перезавантажити або ввійти знову, щоб отримати глобальне середовище, - це те, що оточення успадковується від батьківських процесів, а кореневий процес для всього іншого, що ви виконуєте, - це ваша оболонка входу ... так що якщо в оболонці входу немає навколишнє середовище ... тоді також не запускаються процеси в оболонці входу. Звичайно, ви можете встановити / оновити середовище для окремих процесів під час їх запуску, але вам доведеться встановити середовище для оболонки входу та перезапустити всі підпроцеси для них, щоб побачити зміни.

Глобальне довкілля

Як хто - то ще згадувалося, вам буде потрібно перезавантаження або вихід з системи / вхід для змін /etc/profile, /etc/profile.d/*.shі /etc/environmentщоб бути перехоплені.

Це тому, що, хоча ці файли визначають глобальне середовище ... вони запускаються лише один раз при вході в систему, тому існуючі входи / сеанси не відображають змін у цих файлах. Перезавантаження "скидає" всі вхідні дані, змушуючи їх підбирати нове середовище.

У своєму власному сеансі входу ви можете source /etc/profile, щоб отримати зміни без перезавантаження або виходу / входу ..., але це вплине лише на ваш власний сеанс та нові процеси, що працюють у вашому сеансі.

Зауважте також, що в Інтерполяції змінної немає /etc/environment(це не сценарій), тому ви не можете робити такі речі, як PATH="$PATH:/my/custom/path"там.

Зазначу також , що /etc/profileі /etc/profile.d/*.shбуде працювати тільки для сеансів входу і тому середовище налаштована не буде доступна система без входу в системі рахунків (тобто , якщо ви намагаєтеся встановити змінні оточення для процесу демона , який працює за межами вашої оболонки).

Зауважте, що bashrcце не корисно для встановлення середовища для всієї оболонки входу, але для оболонок bash та підпроцесів ... так що для справжнього "global" або "user global" ви, ймовірно, хочете поставити конфігурацію середовища в /etc/profileабо /etc/profile.d/my-custom-env.shабо ~/.profile. Інші оболонки (наприклад, zsh) також мають свої власні файли конфігурації, так що не-bash-специфічне середовище конфігурації в bashrc спричинить проблеми або плутанину, якщо / при переключенні оболонок (або у інших користувачів в системі, що використовують різні оболонки).

Загальною проблемою є встановлення нової програми та для правильного запуску потрібно вказати якесь середовище. Глобальне середовище - одна відповідь, але часто потрібна перезавантаження, яка не ідеальна для серверів та автоматичного надання / налаштування випадків використання. Ви повинні запитати себе, чи справді це змінна, яка потрібна всім користувачам та програмам у системі чи це дійсно просто щось, що потрібно зробити доступним для конкретного користувача чи програми.

Для конкретного користувача

погляньте на включення середовища в профіль або bashrc у домашній каталог користувача (наприклад ~/.profile ~/.bashrc) залежно від того, чи хочете ви це для інтерактивних, вхідних оболонок, лише для bash тощо.

Майте на увазі, що для цього потрібні також перезавантаження або вихід / вхід, щоб зміни середовища були доступні для всіх процесів в сеансі входу користувача. Користувач може source ~/.profile... але це робиться в терміналі і лише оновлює середовище в межах сеансу терміналу та дочірніх процесів ... не обов'язково для всього середовища входу користувача.

Для конкретної програми є пара варіантів.

Перше - просто забезпечити середовище під час виконання команди:

VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2

Якщо ви використовуєте Systemd ви можете також вказати середу , в файлі блок / послуг в відповідності [Service]зEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE

Цей параметр може бути незграбним, тому що вам потрібно вказувати середовище щоразу, коли ви запускаєте програму, але якщо середовище дійсно потрібне лише цій програмі ... це дійсно найкращий спосіб, і ви повинні звикнути до цього, а не скидати все у файл bashrc або файл профілю.

Якщо ви не використовуєте systemd або init для налаштування середовища та запуску програми ... тоді, звичайно, ви також можете просто обернути виконання програми за допомогою скрипту bash, де ви збережете повну команду, включаючи налаштування середовища для зручності.

Список літератури:

Тут також є дуже детальна відповідь, яку я пропоную прочитати: /ubuntu//a/247769/824160


3

створити спеціальний скрипт оболонки під

/etc/profile.d/

додайте глобальні змінні середовища в створений сценарій, перезавантажте машину, тоді вона буде доступна для всіх.


Я вважаю, що це більш надійний підхід, ніж редагування файлу / etc / Environment, оскільки цей файл може бути змінений у міру оновлення пакетів.
фраземоване

2

Додавання змінної до /etc/environmentсправді працювало для мене.

Однак мені довелося перезавантажуватися після зміни, /etc/environmentщоб зміни набрали чинності. Простого закриття та повторного відкриття вікна терміналу було недостатньо.


3
Ви завжди можете зробити це source /etc/environmentдля його перезавантаження.
Пантро

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