Як встановити змінну середовища користувача? (постійно, не сесія)


145

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

Як встановити змінну середовища для конкретного користувача? Я на дебіанському стиску. Який саме синтаксис я повинен укласти у файл, щоб зробити ABC = "123"?


7
Що ви вже пробували?
l0b0

1
редагування .bashrc, .bash_profile, .profile та .ssh / eviroment. Хоча я не знаю, чи писав я його в потрібному місці чи мав правильний синтаксис кожного разу

4
.bashrcє головним місцем для цього.
rozcietrzewiacz

@rozcietrzewiacz: гаразд, але ... навіть маючи рішення, я спробував встановити ABC1 та ABC2 на початку та в кінці цього файлу, і це не встановлено в моєму середовищі.

1
Перевірте, чи .bash_profileмістить щось подібне [[ -f ~/.bashrc ]] && . ~/.bashrc.
rozcietrzewiacz

Відповіді:


113

Ви повинні помістити декларацію у файли ініціалізації вашої оболонки:

  • Якщо ви використовуєте bash, ash, ksh або іншу оболонку в стилі Борна, ви можете додати

    ABC="123"; export ABC
    

    у вашому .profileфайлі ( ${HOME}/.profile). Це ситуація за замовчуванням для більшості установок Unix, зокрема Debian.

    Якщо оболонка для входу є bash, ви можете використовувати .bash_profile( ${HOME}/.bash_profile) або .bash_loginзамість цього.

    Примітка: Якщо будь-який з цих файлів існує, і оболонка для входу є bash, .profileне читається, коли ви входите через ssh або на текстову консоль, але він все ще може бути прочитаний замість того, .bash_profileякщо ви входите з GUI. Також, якщо немає .bash_profile, то використовуйте .bashrc.

  • Якщо ви встановили zsh як оболонку для входу, використовуйте ~/.zprofileзамість ~/.profile.

  • Якщо ви використовуєте tcsh, додайте

    setenv ABC "123"
    

    у .loginфайлі ( ${HOME}/.login)

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


5
Поводження за замовчуванням su user- це змінити право власності на поточну оболонку на аргумент імені користувача, зберігаючи домашній каталог та середовище виклику користувача. Щоб ввести оболонку таким чином, щоб стати новим користувачем та отримати всі їхні налаштування навколишнього середовища ($ PATH, $ HOME, $ ABC тощо), вам потрібно ввести як - перший аргумент su. su - usernameвиконає те, про що ви просите.
Тім Кеннеді

1
Зачекайте: що ви маєте на увазі під "вийшов у корінь"? У будь-якому випадку введення «су» не ініціалізує оболонку. Вам потрібно «су -» (див. man su)
Маттео

1
Чому ти suв першу чергу? Ви не просто створили root-власність, .profileяку користувач не може використовувати?
rozcietrzewiacz

1
@acid це те, що потрібно було зробити. Питання в тому, що з’являється під час входу. Щоб перевірити це, спочатку вийдіть із системи .
rozcietrzewiacz

7
Оскільки .profileвін читається всіма сумісними оболонками Bourne, не слід писати синтаксис Bash у цей файл. Зокрема, export VARIABLE=valueпотребує реконструкції VARIABLE=value; export VARIABLE.
tripleee

48

Використовуйте /etc/environmentфайл для встановлення змінних середовища. Потім додайте наступний рядок всередині /etc/environmentфайлу.

ABC="123"

Тепер змінна ABC буде доступна з усіх сеансів користувача. Для перевірки змінної виходу спочатку оновіть змінну середовища за допомогою команди

source /etc/environment

і біжи echo $ABC.


4
+1 для вихідної команди. Цього не було у всіх відповідях
Неррв,

5
Будьте уважні, що /etc/environmentне підтримує повний синтаксис bash, що я зрозумів важкий шлях. Наприклад, помістити PATH="/usr/bin:/usr/sbin"та виконати PATH="$PATH:/foo/bar"наступний рядок не вийде
user2428118

Не впевнений, що це особиста проблема чи що, але мені довелося перезавантажити ОС після встановлення цього параметра /etc/environment, навіть якщо я перезапустив bash-термінал або набрав source /etc/environment. Тож якщо у вас виникають проблеми, коли змінна середовища не продовжується, спробуйте перезавантажити.
Blairg23

9

Це загальна процедура, яку ви можете використовувати майже для будь-якої оболонки. У будь-якому випадку, ви повинні знати, з якою оболонкою звичайно входитиме користувач:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

Тоді ви повинні розібратися, які точкові файли зазвичай використовували цю оболонку:

man $shell

Ярлик, який може працювати, полягає в тому, щоб перерахувати ті крапки-файли, які містять ім'я оболонки:

ls ~/.*${shell}*

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

echo .bashrc

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

Що стосується оголошення змінної "постійно", зауважте, що це поширюється лише на сеанс. Немає способу отримати доступ до значення змінної без сеансу, тому вона не має жодного значення поза однією. Якщо ви маєте на увазі "лише для читання", це залежить від оболонки, і в Bash ви можете використовувати:

declare -r VAR

якщо воно вже має значення, або

declare -r VAR=value

призначити його одночасно. Не всі снаряди мають цю особливість.

Щоб оголосити змінну в більшості оболонок, слід використовувати ім’я змінної ( [A-Za-z_][A-Za-z0-9_]*), за яким слід знак рівності (а жодних пробілів навколо знака рівності), а потім значення (бажано, цитувати, якщо значення не є простим [A-Za-z0-9_]+). Наприклад:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1

5

Використовуйте експорт.

export ABC="123"

Щоб перевірити, чи встановлено, використовуйте

env

та / або

env | grep ABC

Щоб додати його назавжди, додайте це у свій ~/.bashrcфайл.

export ABC="123"

6
Він хоче знати гаряче, щоб визначити його постійно , тобто в який файл поставити визначення.
Маттео

1
Не працює. Після того як я вийду, змінна пішла. Мені потрібно це протягом сеансів

1
ви маєте на увазі, permenateа не permenently: D
whoami

дивіться на редагуванняbashrc
whoami

5
що permenate? ти маєш на увазі permanent?
SSH Це

3

Точна команда:

echo 'export ABC = "123"' >> ~/.profile

4
Точно? Серйозно? Яка оболонка (a) читає ~/.profileта (b) дозволяє простір до і після =?
G-Man

1

Найкращий спосіб, який працював для мене, - це змінити файл .bashrc в оболонці BASH.

використовувати це для прикладу:

  1. відкрийте файл .bashrc
  2. додати цей рядок:

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    наприклад: export HOME = "/home/user/"

    Не забудьте використовувати, ""оскільки використання ' 'не буде працювати, і ваш файл bashrc повідомить про помилку під час пошуку.

  3. джерело його в поточному сеансі.

Я також спробував змінити файл / etc / environment, але це не дозволило мені створити нову змінну середовища, і коли я знайшов її, це підказало помилку, що визначена змінна не знайдена.

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