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

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

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


person A. K.    schedule 29.07.2011    source источник
comment
Для тех, кто ищет, как это сделать в Fish shell, см. Заголовок stackoverflow.com/questions/30703860/ (хотя этот вопрос не для конкретной оболочки)   -  person Elijah Lynn    schedule 04.04.2019


Ответы (5)


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

unset GNUPLOT_DRIVER_DIR
person Peder Klingenberg    schedule 29.07.2011
comment
но это работает только для сеанса, как насчет того, чтобы отключить его определенно? или, может быть, поиск, где установлена ​​переменная, чтобы вы могли ее удалить? - person eLRuLL; 19.04.2014
comment
Это должно работать для каждого экземпляра терминала. Как правило, каждый раз, когда открывается окно терминала, оно загружает переменные из различных мест, таких как ~ / .bashrc, ~ / .profile и т. Д. Любые переменные, которые вы установили в одном экземпляре терминала, не будут перенесены в другой. Если у вас есть переменная, которая, кажется, устанавливается автоматически каждый раз, когда вы открываете терминал, попробуйте поискать ее в различных скрытых файлах в вашем домашнем каталоге. Или, чтобы увидеть, где он устанавливается, попробуйте grep -r ‹X› ~, где ‹X› - имя переменной. Это может занять некоторое время, если в вашем домашнем каталоге много файлов. - person matt5784; 08.05.2014
comment
Однако это также удаляет переменную из оболочки. Это единственный способ unexport сделать T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T? - person olejorgenb; 11.12.2016
comment
@olejorgenb По крайней мере, в bash вы можете сказать declare +x MYVAR, чтобы удалить экспорт, но сохранить значение в текущей оболочке. - person Peder Klingenberg; 15.12.2016
comment
@PederKlingenberg export -n MYWAR также работает в Bash. - person jarno; 03.05.2017

Пошаговое руководство по созданию и удалению переменной среды в 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 очистила все переменные среды до значений по умолчанию при входе в систему.

person Eric Leschinski    schedule 03.06.2014
comment
возможно, echo $VARIABLE лучше, чем env | grep VARIABLE, он легче, так как не нужно распечатывать все переменные, а затем отправлять результат другому процессу (grep). Кроме того, env | VARIABLE может поймать более одной переменной, соответствующей одному и тому же шаблону. Plus2, echo $VARIABLE позволяет дополнить имя переменной, нажав ‹Tab› (если он существует, это также может быть намеком на то, что вы хотите сделать). - person Rodrigo Gurgel; 12.01.2016
comment
'env | grep VARIABLE 'лучше, чем' echo $ VARIABLE ', потому что я могу сказать, что он действительно исчез - person calasyr; 23.09.2016
comment
@RodrigoGurgel, echo $VARIABLE не сообщает вам, является ли VARIABLE переменной оболочки (здесь называется локальной переменной) или переменной среды, что и составляет весь смысл пошагового руководства. - person hmijail mourns resignees; 04.10.2016
comment
Обратите внимание, что env -i bash, похоже, создает подоболочку (по крайней мере, на Mac), что может иметь непредвиденные последствия. - person Mark Chackerian; 28.07.2017
comment
@RodrigoGurgel, использующий echo, не будет показывать существующую переменную, установленную на пустую строку или nul. Однако, на ваш взгляд, правильным способом проверки переменной будет env | grep -e '^VARNAME='. - person Thomas; 01.02.2019

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

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

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

Разница в поведении заключается в том, что переменные, установленные с помощью команды setenv, автоматически экспортируются в подоболочку, а переменные, установленные с помощью 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-reference/0130200484/0130200484_ch18lev1sec24.html

person G Eitan    schedule 14.11.2018
comment
Отличное дополнение о различиях между подоболочками set / setenv и rt! - person 4levels; 05.03.2019

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

export GNUPLOT_DRIVER_DIR=
person Nilesh K.    schedule 20.12.2017
comment
Переменная все еще существует, но содержит пустую строку, как вы можете видеть в выводе команды env. Возможно, приложение, использующее переменную, не различает несуществующую и пустую переменную среды. - person Palec; 24.12.2017
comment
да, он будет содержать, это было просто для удаления значения, а не для удаления переменной. Но да, можно использовать - сбросить GNUPLOT_DRIVER_DIR. - person Nilesh K.; 02.01.2018
comment
Это не работает в случае переменной PAGER. Я попытался сбросить настройку PAGER с помощью export PAGER=, но это полностью отключило разбиение на страницы - все мои справочные страницы просто выгружались прямо в терминал. unset PAGER сделал свое дело, вернув его к поведению по умолчанию. - person Chad; 14.12.2019

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

person Rishabh Bohra    schedule 13.02.2020