Відповіді:
/etc/environment
Оновлення буде працювати тільки на наступній сесії, вона автоматично не перезапускається.
Це означає, що ви не можете змінити це для сеансів, які вже розпочалися для інших користувачів.
Якщо ви хочете "перезавантажити" все, що є, /etc/environment
вам потрібна наступна команда:
source /etc/environment
Але знову-таки це працюватиме лише для вашого власного поточного сеансу, інші користувачі не впливатимуть, поки вони не розпочнуть новий сеанс або не запустять вищевказану команду в своєму сеансі.
Ці файли конфігурацій, будь то глобальні ( /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
створити спеціальний скрипт оболонки під
/etc/profile.d/
додайте глобальні змінні середовища в створений сценарій, перезавантажте машину, тоді вона буде доступна для всіх.
Додавання змінної до /etc/environment
справді працювало для мене.
Однак мені довелося перезавантажуватися після зміни, /etc/environment
щоб зміни набрали чинності. Простого закриття та повторного відкриття вікна терміналу було недостатньо.
source /etc/environment
для його перезавантаження.