Я использую source
команду в моем скрипте bash для чтения / печати значений переменных
more linuxmachines_mount_point.txt
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
source linuxmachines_mount_point.txt
echo $linuxmachine01
sdb sdc sdf sdd sde sdg
Что является противоположностью для source
того, чтобы сбросить переменные?
Ожидаемые результаты
echo $linuxmachine01
< no output >
bash
shell-script
source
Яэль
источник
источник
source
то, что устанавливает переменные в вашей среде, аexport
утверждения в файле, который выsource
. Таким образом, противоположностьsource
может бытьsource
, если у васsource
другой файл, в которомunset
все переменные.export
с. Все, чтоexport
нужно - это скопировать значения в среду, но они присутствуют как переменные оболочки, независимо от того, определены они или нет как переменные среды. Более того, определение ненужных переменных среды сокращает максимальную длину командной строки, поскольку они хранятся в одном (ограниченном!) Пространстве для каждого процесса.Ответы:
Использование подоболочки (рекомендуется)
Запустите исходную команду в подоболочке:
Подоболочки определяются круглые скобки:
(...)
. Любые переменные оболочки, установленные в подоболочке, будут забыты, когда она будет завершена.Использование unset
Это отменяет любую переменную, экспортируемую
linuxmachines_mount_point.txt
:-F'[ =]+'
говорит awk использовать любую комбинацию пробелов и знаков равенства в качестве разделителя полей./^export/{print $2}
Это говорит awk выбирать строки, которые начинаются с,
export
а затем печатать второе поле.unset $(...)
Это запускает команду внутри
$(...)
, захватывает ее стандартный вывод и сбрасывает все переменные, названные ее выводом.источник
file
является оператором экспорта.Вы не можете удалить
source
сценарий.Что вы можете сделать, это сохранить все экспортированные переменные во временном файле, сравнить их с переменными после того, как сценарий получен, а затем удалить переполнение
unset
, например:источник
export
s.Вы можете использовать
unset
команду, чтобы «забыть» переменные.источник
Самое простое решение получить ожидаемый результат (ничего) - повторно объявить переменную как пустую:
Конечно, переменная все еще определена (и экспортирована), пустая, но определенная:
Чтобы правильно удалить переменную как из среды, так и из запущенной оболочки, вы должны использовать unset (рекомендуемый способ):
источник
Самый простой способ сделать это - изменить скрипт, чтобы он также определил команду для отмены эффекта скрипта:
источник
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
тогда это простоunset linuxmachines
для возврата.Вы можете написать свой linuxmachines_mount_point.txt следующим образом
Когда вам нужны ваши переменные
Когда вы хотите удалить переменные
источник
Если вы используете
source
команду для активацииVirtualEnvironment
, вы можете выйти из нее с помощью командыdeactivate
.источник