Установка переменных среды в Linux с помощью Bash

В tcsh у меня работает следующий скрипт:

#!/bin/tcsh
setenv X_ROOT /some/specified/path

setenv XDB    ${X_ROOT}/db
setenv PATH   ${X_ROOT}/bin:${PATH}

xrun -d xdb1 -i $1 > $2

Что эквивалентно функции tcsh setenv в Bash?

Есть прямой аналог? Переменные среды предназначены для поиска исполняемого файла.


person pbh101    schedule 24.10.2008    source источник


Ответы (5)


export VAR=value установит VAR в значение. Заключите его в одинарные кавычки, если вам нужны пробелы, например export VAR='my val'. Если вы хотите, чтобы переменная интерполировалась, используйте двойные кавычки, например export VAR="$MY_OTHER_VAR".

person mipadi    schedule 24.10.2008
comment
PS: нет необходимости в двойных кавычках в последнем. Оболочка не выполняет разбиение слов для присваивания переменных. - person Jens; 20.05.2012
comment
Только для начинающих. Я не понял этого напрямую, здесь на обычном английском языке: интерполировать $X здесь означает, что у вас уже есть переменная X, которая заполнена значением, например. A, и вы хотите сначала прочитать это значение A, а затем присвоить это значение как значение VAR. Конечно, вы не хотите, чтобы VAR был строкой $X. И тогда комментарий выше кажется также логичным, что вам даже не понадобится файл . А для прямого присвоения A используйте «A». Пожалуйста, поправьте меня, если я ошибся. - person questionto42; 17.12.2020

Причина, по которой люди часто предлагают писать

VAR=value
export VAR

вместо более короткого

export VAR=value

заключается в том, что более длинная форма работает в большем количестве разных оболочек, чем короткая. Если вы знаете, что имеете дело с bash, то, конечно, все работает нормально.

person zaphod    schedule 24.10.2008

Установите локальную переменную и переменную среды с помощью Bash в Linux.

Проверьте локальные переменные или переменные среды для переменной с именем LOL в Bash:

el@server /home/el $ set | grep LOL
el@server /home/el $
el@server /home/el $ env | grep LOL
el@server /home/el $

Проверка работоспособности, нет локальной переменной или переменной среды, называемой LOL.

Установите локальную переменную с именем LOL в локальной среде, но не в среде. Итак, установите его:

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ env | grep LOL
el@server /home/el $

Переменная «LOL» существует в локальных переменных, но не в переменных среды. LOL исчезнет, ​​если вы перезапустите терминал, выйдите/войдёте в систему или запустите exec bash.

Установите локальную переменную, а затем очистите все локальные переменные в Bash

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ exec bash
el@server /home/el $ set | grep LOL
el@server /home/el $

Вы также можете просто отключить одну переменную:

el@server /home/el $ LOL="so wow much code"
el@server /home/el $ set | grep LOL
LOL='so wow much code'
el@server /home/el $ unset LOL
el@server /home/el $ set | grep LOL
el@server /home/el $

Локальная переменная LOL исчезла.

Повысить уровень локальной переменной до переменной среды:

el@server /home/el $ DOGE="such variable"
el@server /home/el $ export DOGE
el@server /home/el $ set | grep DOGE
DOGE='such variable'
el@server /home/el $ env | grep DOGE
DOGE=such variable

Обратите внимание, что при экспорте он отображается как локальная переменная, так и переменная среды.

Экспортированная переменная DOGE выше переживает сброс Bash:

el@server /home/el $ exec bash
el@server /home/el $ env | grep DOGE
DOGE=such variable
el@server /home/el $ set | grep DOGE
DOGE='such variable'

Отменить установку всех переменных среды:

Вам нужно вытащить банку Чака Норриса, чтобы сбросить все переменные среды без выхода из системы/входа в систему:

el@server /home/el $ export CAN="chuck norris"
el@server /home/el $ env | grep CAN
CAN=chuck norris
el@server /home/el $ set | grep CAN
CAN='chuck norris'
el@server /home/el $ env -i bash
el@server /home/el $ set | grep CAN
el@server /home/el $ env | grep CAN

Вы создали переменную среды, а затем перезагрузили терминал, чтобы избавиться от них.

Или вы можете установить и отключить переменную среды вручную следующим образом:

el@server /home/el $ export FOO="bar"
el@server /home/el $ env | grep FOO
FOO=bar
el@server /home/el $ unset FOO
el@server /home/el $ env | grep FOO
el@server /home/el $
person Eric Leschinski    schedule 20.08.2014

VAR=value устанавливает VAR в значение.

После этого export VAR будет отдавать его и дочерним процессам.

export VAR=value - это сокращение, выполняющее и то, и другое.

person iny    schedule 24.10.2008
comment
разве это не дает его родительским процессам, а не дочерним? Если сценарий оболочки выполняет экспорт, то оболочка, с которой я его вызвал, имеет эту переменную IIRC. - person rmeador; 24.10.2008
comment
№ отмечены для автоматического экспорта в среду последовательно выполняемых команд, то есть дочерних процессов, выполняемых после экспорта. - person iny; 24.10.2008
comment
из любопытства, откуда эта цитата? - person pbh101; 25.10.2008

Я думаю, что вы ищете export - хотя я могу ошибаться. Я никогда раньше не играл с tcsh. Используйте следующий синтаксис:

export VARIABLE=value
person Oli    schedule 24.10.2008