Я хочу знать, как очистить все переменные, которые я определил в командной строке, не закрывая терминал?
например, если я установил переменную в командной строке как:
$ a=1
Теперь я хочу удалить переменную $a
(и многие другие переменные, определенные аналогичным образом), не закрывая терминал. Я мог бы использовать, unset
но это будет беспокойно, если есть большие нет. переменных
shell
environment-variables
Эдвард Торвальдс
источник
источник
exec "$0"
возможно - но трудно сказать, что вы подразумеваете под глобальным .$var
с, аvar=$(declare -p +F);
затем передает его в качестве аргумента функции, котораяecho "${2%%=*}".
отвечает. Этот ответ имеет несколько проблем с огромным размером - но он должен работать, если ваша среда не огромна.Ответы:
Если вы делаете (GNU coreutils)
вы будете использовать свежую и новую среду
источник
exec "$0"
?$0
- нулевой аргумент исполняемой оболочки. Таким образом, если вы используетеbash
$0
этоbash
(вероятно , - это могло бы быть-bash
в-l
случае ogin оболочки в зависимости от версии) . Если вы запускаете скрипт с#!/bin/bash
bangline,$0
это путь к скрипту.exec "$0"
вероятно, более гибкий, ноexec bash
более явный. Если вы вводите эту команду в терминале, выbash
должны распознать ее в интерактивной среде и сделать эквивалентbash -i
- который также запустит ваш~/.bashrc
файл.export a=123
, эта переменная наследуется ...Вы можете использовать
env
, который предоставляется GNU coreutils (обычно предустановлен в системах GNU / Linux):exec env --ignore-environment /bin/bash
Системный вызов exec позволяет заменить текущий процесс новой версией вашей оболочки без использования среды.
Это имеет преимущество также для очистки любых экспортируемых переменных среды.
источник
export PATH=$PATH:~/foo
, верно?