Eu uso o source
comando no meu script bash para ler / imprimir os valores das variáveis
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
Qual é o oposto de source
para desarmar as variáveis?
Resultados esperados
echo $linuxmachine01
< no output >
bash
shell-script
source
yael
fonte
fonte
source
que está definindo as variáveis em seu ambiente, mas asexport
instruções no arquivo que vocêsource
. Portanto, o oposto desource
poderia sersource
, se você tiversource
um arquivo diferente comunset
as mesmas variáveis.export
s. Tudo o queexport
faz é copiar os valores no ambiente - mas eles estão presentes como variáveis de shell, independentemente de serem ou não definidos como variáveis de ambiente. Além disso, a definição de variáveis de ambiente desnecessárias reduz o comprimento máximo da linha de comando, pois elas são armazenadas no mesmo espaço (limitado!) Por processo.Respostas:
Usando um subshell (recomendado)
Execute o comando de origem em um subshell:
Subcamadas são definidas por parênteses:
(...)
. Quaisquer variáveis de shell definidas no subshell são esquecidas quando o subshell termina.Usando não configurado
Isso desativa qualquer variável exportada por
linuxmachines_mount_point.txt
:-F'[ =]+'
diz ao awk para usar qualquer combinação de espaços e sinais de igual como separador de campos./^export/{print $2}
Isso indica ao awk para selecionar as linhas que começam com
export
e depois imprimir o segundo campo.unset $(...)
Isso executa o comando dentro
$(...)
, captura seu stdout e desativa todas as variáveis nomeadas por sua saída.fonte
file
é uma declaração de exportação.Você não pode un
source
o script.O que você pode fazer é armazenar todas as variáveis exportadas em um arquivo temporário, compará-las com as variáveis após a origem do script e, em seguida, remover o excesso com
unset
, por exemplo:fonte
export
s.Você pode usar o
unset
comando para "esquecer" variáveis.fonte
A solução mais simples para obter a saída que você espera (nada) é declarar novamente a variável como vazia:
Obviamente, a variável ainda está definida (e exportada), vazia, mas definida:
Para remover corretamente a variável do ambiente e do shell em execução, você deve usar o unset (da maneira recomendada):
fonte
A maneira mais simples de fazer isso é modificar seu script, para que ele também defina um comando para desfazer o efeito do script:
fonte
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
então é apenasunset linuxmachines
para reverter.Você pode escrever seu linuxmachines_mount_point.txt assim
Quando você precisa de suas variáveis
Quando você deseja remover as variáveis
fonte
Se você estiver usando o
source
comando para ativar umVirtualEnvironment
, você pode sair usando o comandodeactivate
.fonte