Де оголосити змінні середовища?


59

Які правильні місця для:

  1. Глобальні змінні середовища повинні впливати на всіх користувачів?
  2. Змінні середовища для конкретних користувачів?

Відповіді:


16

Я думаю, що сторінка вікі спільноти про змінні середовища допоможе вам розібратися


2
Проблема полягає в тому, що пов'язаний документ плутається та / або відверто неправильно в частині змінних, визначених користувачем. Я все ще намагаюся знайти оболонку-агностик, як це зробити. $ HOME / .profile, мабуть, найкраща ставка ...
Rmano

16
Будь ласка, вставте текст або зробіть знімок пов’язаного вмісту - він може бути недоступним у майбутньому!
Нам Г ВУ

4
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Thomas Ward

75

Щоб додати відповідь sagarchalise, я можу підсумувати, що посилання пропонує як відповідні місця для налаштувань.

Для глобальних налаштувань, загальносистемні змінні середовища

  • Використовуйте /etc/environment
  • Не використовуйте /etc/profileабо/etc/bash.bashrc

Зі сторінки:

/etc/environment[...] спеціально призначений для загальносистемних параметрів змінної середовища. Це не файл скриптів, а складається з виразів призначення, по одному на рядок. Зокрема, цей файл зберігає загальносистемні параметри та параметри шляху.

Використання /etc/profile- це дуже Unix-y спосіб, але його функціональність значно знижується в Ubuntu. Він існує лише для того, щоб вказувати /etc/bash.bashrcта збирати записи /etc/profile.d.

У моїй системі єдиний цікавий запис у profile.d /etc/profile.d/bash_completion.sh.

Для місцевих налаштувань або для кожного користувача

Рекомендована попередня версія сторінки Ubuntu ~/.pam_environment, але ця сторінка пропонує, що якщо це не працює, вам слід скористатися

  • ~/.profile - Це, мабуть, найкращий файл для розміщення присвоєнь змінної середовища, оскільки він автоматично виконується DisplayManager під час сеансу робочого столу процесу запуску, а також оболонки входу при одному вході з текстової консолі.

  • ~/.bash_profileабо ~./bash_login- Якщо одна з таких існує, bash виконує її замість того, ~/.profileколи bash запускається як оболонка входу. Bash віддасть перевагу ~/.bash_profileв ~/.bash_login. [...] Ці файли не впливатимуть на графічний сеанс за замовчуванням. "

  • ~/.bashrc - "... може бути найпростішим місцем для встановлення змінних".

1
Які програми читати /etc/environmentі коли? Схоже, це не працює з cron, навіть коли використовуєтьсяSHELL=/bin/bash
SystemParadox

1
Здається, що / etc / environment є частиною PAM, а значить, вона повинна встановлювати середовище за замовчуванням для всіх процесів. cron є особливим (тобто зламаним) в тому, що спеціально перезаписує це середовище своїм власним.
SystemParadox

так як поводиться .bashrc? після bash_profile? замість .profile?
відкривається

1
@opensas Ви, певно, повинні задати окреме запитання, посилаючись на це питання або відповідь.
belacqua

@belacqua дозволяє сказати, що мені потрібно додати 2 або більше змінних середовища, щоб /etc/environmentподобатися JAVA_HOME="/opt/java" і ANT_HOME="/opt/ant" як це зробити
Kasun Siyambalapitiya

7

У вас є:

/ etc / profile: загальносистемний .profile-файл для оболонки Bourne (sh (1)) та оболонок, сумісних з Bourne (bash (1), ksh (1), ash (1), ...).

які в Люцид і Маверик бігають

/etc/profile.d/*.sh

якщо він присутній і якщо оболонка користувача баш:

/etc/bash.bashrc

Для середовища користувача існує заплутаний масив, специфічний для оболонки та чи вважається він "оболонкою входу". Якщо оболонка забита:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

для ш / тире:

$HOME/.profile

для zsh, я навіть не збираюся це намагатися зрозуміти .


5

Як рекомендовано на https://help.ubuntu.com/community/EnvironmentVariables :

  1. Глобальні змінні середовища, які повинні впливати на всіх користувачів, повинні входити /etc/environment.

  2. Слід встановити змінні середовища, що стосуються користувача ~/.pam_environment.

Уникайте файлів профілю та rc для встановлення змінних середовища на Ubuntu. Вони завдали мені більше головних болів, ніж вони варті.

Це легше сказати, ніж зробити;)

Не виключено, що ви можете зіткнутися з тим самим розривом конфігурації, який існував для мене. Нижче див. Рішення щодо зашифрованого будинку.

Мій ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Чому потворний статичний шлях? ${PATH}не працював би для мене. Я кілька разів замурував свій логін, намагаючись обійти його, тому я приклеююсь до потворної статичної копії за замовчуванням :)

Обхід для зашифрованих домашніх папок

У випусках Ubuntu до та включає Precision 12.04 Beta 2, якщо ви використовуєте зашифрований домашній каталог, вам потрібно буде змінити /etc/pam.d/common-sessionйого, щоб завантажити його ~/.pam_environment. Це рішення, мабуть, працює і для більш ранніх версій, але я його не перевіряв.

Гюнтер Монтаг (g-montag) писав 2010-08-19:

Здається, це проблема із зашифрованими домашніми каталогами. я додав

потрібен сеанс pam_env.so

наприкінці /etc/pam.d/common-session і тепер ~ / .pam_environment читається. В іншій системі без зашифрованих домашніх каталогів (також 10.04) робота навколо не потрібна. Можливо, у моєму випадку система намагається прочитати ~ / .pam_environment, перш ніж її розшифрувати.

Адаптовано з моєї відповіді на Super User: https://superuser.com/a/408373/66856


Це все ще неправильно: теж ${HOME}не буде працювати. Розширення в .pam_environment.
detly

2
@detly є розширення в .pam_environment, але HOMEне встановлено, що рано, як правило. Якби цей рядок був прочитаний DEFAULT=${PATH}/Applications/jdk, ви б побачили значення PATHвставленого в нього.
muru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.