Как навсегда установить переменные среды

227

Мои переменные

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

Как сохранить эти переменные навсегда?

user3021349
источник
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для Bourne-подобных оболочек, /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.

Kiwy
источник
Это .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]$
user3021349
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(хотя он не нуждается в строчке bang или правах на исполняемый файл, поскольку он получен). проверьте документацию к дистрибутиву или посмотрите /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 "$@"
Graeme
источник
Итак, если я добавил пары значений в мой environmentфайл, что заставляет их загружаться? Например, после выхода из редактора vi (изменения записаны успешно), я ожидаю написать echo $MY_NEW_VARIABLEи посмотреть, как он распечатывается - РЕДАКТИРОВАТЬ: я вижу, что они там, если я запустил новую командную оболочку
bkwdesign
Не уверен, если это личная проблема или что, но мне пришлось перезагрузить ОС после установки этого /etc/environment, даже если я перезапустил терминал Bash или набрал source /etc/environment. Поэтому, если у вас возникают проблемы, когда переменная окружения не сохраняется, попробуйте перезагрузить компьютер.
Blairg23
@bkwdesign @ Blairg23, /etc/environmentэто не сценарий, поэтому его нельзя получить. Он загружается во время входа (и нескольких других системных событий) PAM, поэтому вы можете либо выйти из системы, либо войти в систему, либо запустить новый сеанс входа в систему в терминале, $ su <your username here>чтобы получить новые значения в этом изолированном сеансе. Значения исчезнут после вашего выхода, так что, вероятно, менее подвержен ошибкам просто полный выход из системы / вход в систему.
AaronDanielson
2

когда вы устанавливаете oracle, oracle попросил вас запустить несколько скриптов, прежде чем нажимать ok. Этот скрипт поместил фиктивную настройку в .bash_profileдомашнюю директорию пользователя oracle. Чтобы увидеть файл, ls -alпокажет все скрытые файлы.

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

sqlplus / as sysdba

startup  
франкфурт
источник
Чем это отличается от принятого ответа ?
Ройма