Как удалить экспортированную переменную среды?


1561

Перед установкой gnuplot я установил переменную окружения GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Во время установки что-то пошло не так.

Я хочу удалить GNUPLOT_DRIVER_DIRпеременную среды. Как мне этого добиться?


2
Для тех, кто ищет, как это сделать в оболочке Fish, см. Stackoverflow.com/questions/30703860/…… (хотя этот вопрос не относится к конкретной оболочке)
Элайджа Линн

Ответы:


2470

unset это команда, которую вы ищете.

unset GNUPLOT_DRIVER_DIR

5
но это работает только для сеанса, как насчет его отмены? или, возможно, поиск, где установлена ​​переменная, так что вы можете пойти и удалить ее?
eLRuLL

32
Это должно работать для каждого терминала. Как правило, каждый раз, когда открывается окно терминала, оно загружает переменные из разных мест, таких как ~ / .bashrc, ~ / .profile и т. Д. Любые переменные, которые вы установили в одном экземпляре терминала, не будут перенесены в другой. Если у вас есть переменная, которая, кажется, устанавливается автоматически каждый раз, когда вы открываете терминал, попробуйте просмотреть различные скрытые файлы в вашем домашнем каталоге. Или, чтобы увидеть, где он установлен, попробуйте «grep -r <X> ~», где <X> - имя переменной. Это может занять некоторое время, если в вашем домашнем каталоге много файлов.
matt5784

1
Это также удаляет переменную из оболочки. Это единственный способ unexportсделатьT="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T ?
olejorgenb

1
@olejorgenb По крайней мере, в bash вы можете сказать, declare +x MYVARчтобы удалить экспорт, но сохранить значение в текущей оболочке.
Педер Клингенберг

5
@PederKlingenberg также export -n MYWARработает в Bash.
Ярно

171

Пошаговое руководство по созданию и удалению переменной среды в bash:

Проверьте, существует ли переменная DUALCASE:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

Это не так, поэтому создайте переменную и экспортируйте ее:

el@apollo:~$ DUALCASE=1
el@apollo:~$ export DUALCASE

Проверьте, если это там:

el@apollo:~$ env | grep DUALCASE
DUALCASE=1

Это там. Так что избавься от этого

el@apollo:~$ unset DUALCASE

Проверьте, все ли еще там:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

Экспортированная переменная среды DUALCASE удалена.

Дополнительные команды, помогающие очистить локальные переменные и переменные среды:

Сбросить все локальные переменные обратно по умолчанию при входе в систему:

el@apollo:~$ CAN="chuck norris"
el@apollo:~$ set | grep CAN
CAN='chuck norris'
el@apollo:~$ env | grep CAN
el@apollo:~$
el@apollo:~$ exec bash
el@apollo:~$ set | grep CAN
el@apollo:~$ env | grep CAN
el@apollo:~$

exec bash Команда очистила все локальные переменные, но не переменные окружения.

Сбросить все переменные окружения обратно по умолчанию при входе в систему:

el@apollo:~$ export DOGE="so wow"
el@apollo:~$ env | grep DOGE
DOGE=so wow
el@apollo:~$ env -i bash
el@apollo:~$ env | grep DOGE
el@apollo:~$

env -i bash Команда очистила все переменные среды по умолчанию при входе в систему.


10
может быть echo $VARIABLEлучше, чем env | grep VARIABLEлегче, так как не нужно печатать все переменные, а затем отправлять свой вывод другому (grep) процессу. Кроме того, env | VARIABLEможет поймать более одной переменной, которая соответствует одному и тому же шаблону. Plus2, echo $VARIABLEпозволяет завершить имя переменной, нажав <Tab> (если она существует, это также может быть подсказкой к тому, что вы хотите сделать).
Родриго Гургель

10
'env | grep VARIABLE 'лучше, чем' echo $ VARIABLE ', потому что я могу сказать, что он действительно исчез
calasyr

8
@RodrigoGurgel, echo $VARIABLEне сообщает вам, является ли VARIABLE переменной оболочки (здесь называемой «локальная переменная») или переменной окружения, что и составляет весь смысл прохождения.
hmijail оплакивает отставников

4
Обратите внимание, что env -i bashсоздается впечатление, что создается подоболочка (по крайней мере, на Mac), которая может иметь непредвиденные последствия.
Марк Чакериан,

2
@RodrigoGurgel, использующий echo, не покажет существующую переменную, для которой задана пустая строка или nul. на ваш взгляд, однако, правильный способ проверки на переменную будет env | grep -e '^VARNAME='.
Томас

5

Поскольку в первоначальном вопросе не упоминается, как была установлена ​​переменная, и поскольку я попал на эту страницу в поисках конкретного ответа, я добавляю следующее:

В оболочке C (csh / tcsh) есть два способа установить переменную окружения:

  1. set x = "something"
  2. setenv x "something"

Различие в поведении состоит в том, что переменные, установленные с помощью команды setenv , автоматически экспортируются в subshell, а переменные, установленные с помощью set, - нет.

Чтобы сбросить набор переменных с помощью set , используйте

unset x

Чтобы сбросить набор переменных с помощью setenv , используйте

unsetenv x

Примечание: во всем вышесказанном я предполагаю, что имя переменной - «x».

кредиты:

https://www.cyberciti.biz/faq/unix-linux-difference-between-set-and-setenv-c-shell-variable/ https://www.oreilly.com/library/view/solaristm-7- ссылка / 0130200484 / 0130200484_ch18lev1sec24.html


Отличное дополнение о различиях между set / setenv и подоболочками!
уровня

4

это может также работать.

export GNUPLOT_DRIVER_DIR=

10
Переменная все еще существует, но она содержит пустую строку, как вы можете видеть в выходных данных envкоманды. Может случиться так, что приложение, которое использует переменную, не различает несуществующую и пустую переменную среды.
Палек

1
да, он будет содержать, это просто удалить значение, а не удалить переменную. Но да, можно использовать - отключить GNUPLOT_DRIVER_DIR.
Нилеш К.

Это не работает в случае переменной PAGER. Я попытался сбросить настройки PAGER с помощью export PAGER=, но это просто полностью отключило пейджинг - все мои справочные страницы просто сбрасывались прямо в терминал. unset PAGERсделал свое дело, вернув его к поведению по умолчанию.
Чад

1

Как уже упоминалось в ответах выше, unset GNUPLOT_DRIVER_DIRдолжно работать, если вы использовали exportдля установки переменной. Если вы установили его навсегда ~/.bashrcили ~/.zshrcпросто удалите его оттуда, будет работать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.