Як постійно встановлювати змінні середовища


227

Мої змінні є

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

Як зберегти ці змінні назавжди?


2
Інші відповіді на цій сторінці чудові. Однією невеликою рекомендацією було б додати /usr/lib/oracle/11.2/client64/libв новий файл під /etc/ld.so.conf.d/шлях. Тоді вам не потрібно встановлювати LD_LIBRARY_PATH, дивіться також тут .
Елліот Фріш

1
Обережно, до цієї історії є більше, ніж спочатку здається. Я запрошую вас перевірити мою відповідь.
Jasonleonhard

Відповіді:


252

Ви можете додати його у файл .profileабо файл профілю оболонки для входу (розташований у домашньому каталозі).

Щоб змінити змінну навколишнього середовища на "постійно", вам потрібно врахувати принаймні такі ситуації:

  1. Оболонка для входу / не входу в систему
  2. Інтерактивна / неінтерактивна оболонка

баш

  1. Bash в якості реєстраційної оболонки завантажить /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profileв порядку
  2. Bash як інтерактивна оболонка без входу буде завантажена ~/.bashrc
  3. Bash як неінтерактивна оболонка без входу завантажить конфігурацію, вказану в змінній середовища $BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

зш

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

кш

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

буржуй

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh або tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

Якщо ви хочете зробити його постійним для всіх користувачів, ви можете редагувати відповідні файли під /etc/, тобто /etc/profileдля оболонок, подібних до Борна, /etc/csh.loginдля (t) csh /etc/zsh/zprofileта /etc/zsh/zshrcдля zsh.

Іншим варіантом є використання /etc/environment, яке в системах Linux зчитується модулем PAM pam_envі підтримує лише прості завдання, а не розширення у стилі оболонки. (Про це див . Посібник Debian .)

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

Не забудьте перезапустити оболонку та переробити користувача, застосувати зміни.

Якщо вам потрібно додати змінну середовища для всієї системи, тепер існує /etc/profile.dпапка, яка містить скрипт sh для ініціалізації змінної.
Ви можете розмістити свій скрипт sh із усіма експортованими тут змінними.
Будьте обережні, хоча це не повинно використовуватись як стандартний спосіб додавання змінної до env на Debian.


Це .profileв, /etc/але я не можу встановити змінні в цьому, .profileбудь ласка, скажіть мені
user3021349

6
.profileзнаходиться у вашому домашньому довіднику не/etc/
Kiwy

1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
користувач3021349

4
@ user3021349 Я не мав на увазі бути грубим, але якщо ви думаєте одну секунду, ви також можете скористатися іншим редактором, який ви майструєте. :wqце команда писати файл і виходити в vi, не забудьте набрати escраніше
Kiwy

3
Вам потрібно буде врахувати змінні середовища в crontabсценаріях. Жодне з цих місць не буде шукано під час crontabзапуску сценарію.
yegle

71

Для того, щоб зробити , якщо для всіх користувачів / оболонок, в залежності від дистрибутива ви можете використовувати /etc/environmentабо /etc/profile. Створення нового файлу в програмі /etc/profile.dможе бути кращим, якщо він існує, оскільки це буде менше конфлікту з оновленнями, внесеними системою упаковки.

В /etc/environment, змінні зазвичай встановлюються за допомогою name=value, наприклад:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

В /etc/profile, ви повинні використовувати , exportтак як це сценарій, наприклад:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

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

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

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

Один із способів зробити це - використовувати сценарій обгортки для запуску програми. Ви можете надати це те саме ім'я, що і ваша програма, і помістити його в /usr/local/binбудь-яке місце, де відображається перед місцезнаходженням вашої програми в PATH. Ось приклад сценарію (не забудьте chmod +xпро сценарій):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"

Отже, якщо я додав пари до вартості у свій environmentфайл, що змушує їх завантажуватися? Наприклад, після виходу з редактора vi (зміни написані успішно), я очікую, що я напишу echo $MY_NEW_VARIABLEі побачу, як він роздруковується - EDIT: я бачу, що вони є там, якщо я запускаю нову командну оболонку
bkwdesign

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

@bkwdesign @ Blairg23, /etc/environmentне є сценарієм, тому його неможливо отримати. Він завантажується під час входу (та кількома іншими системними подіями) PAM, тому ви можете або вийти / увійти, або запустити новий сеанс входу в терміналі, $ su <your username here>щоб отримати нові значення в цьому ізольованому сеансі. Значення зникають, коли ви виходите, тому, ймовірно, менш схильні до помилок просто повністю вийти з системи / увійти.
AaronDanielson

2

коли ви встановлюєте oracle, oracle попросив запустити деякі сценарії, перш ніж натиснути кнопку ОК. Цей сценарій помістив фіктивну настройку в .bash_profileдомашній каталог користувача в oracle. Щоб побачити файл, ls -alпокажуть всі приховані файли.

введіть, nano bash_profileщоб відкрити файл. Внесіть зміни у файл, щоб відображати ім'я хоста та відповідне ім'я sid. перевірити будь-які інші налаштування, які потребують змін. натисніть клавішу управління x, щоб зберегти і введіть y, коли вас запитають, чи потрібно зберегти. Натисніть клавішу повернення для збереження. Перезавантажте комп'ютер. Реєстрація як користувач Oracle. запустити базу даних, набравши текст

sqlplus / as sysdba

startup  

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