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


1556

Перш ніж встановлювати gnuplot, я встановлюю змінну середовища GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Під час встановлення щось пішло не так.

Я хочу видалити GNUPLOT_DRIVER_DIRзмінну середовища. Як я можу цього досягти?


2
Для тих, хто шукає, як це зробити в шкаралупі Риби, дивіться stackoverflow.com/questions/30703860/… (хоча це питання не стосується конкретної оболонки)
Ілля Лінн

Відповіді:


2463

unset це команда, яку ви шукаєте.

unset GNUPLOT_DRIVER_DIR

4
але це працює лише для сеансу, а як бути, якщо не встановити це безумовно? або, можливо, шукати, де встановлена ​​змінна, і ви можете перейти та видалити її?
eLRuLL

31
Це повинно працювати для кожного термінального примірника. Як правило, кожного разу, коли відкриється вікно терміналу, воно завантажує змінні з різних місць, таких як ~ / .bashrc, ~ / .profile тощо. Будь-які змінні, встановлені в одному екземплярі терміналу, не перенесуть на інший. Якщо у вас є змінна, яка, здається, встановлюється автоматично кожного разу, коли ви відкриваєте термінал, спробуйте переглядати різні приховані файли у вашому домашньому каталозі. Або, щоб побачити, де він встановлений, спробуйте "grep -r <X> ~", де <X> - ім'я змінної. Це може зайняти деякий час, якщо у вашому домашньому каталозі багато файлів.
matt5784

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

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

4
@PederKlingenberg також export -n MYWARпрацює в Bash.
jarno

170

Покрокове створення та видалення змінної середовища в 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 , автоматично експортуються в підпакет, тоді як набір змінних з набором - ні.

Щоб зняти набір змінних із набором , використовуйте

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 wrt!
4рівні

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.