Como faço para excluir uma variável de ambiente exportada?

1559

Antes de instalar o gnuplot, defino a variável de ambiente GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Durante a instalação, algo deu errado.

Eu quero remover a GNUPLOT_DRIVER_DIRvariável de ambiente. Como posso conseguir isso?

AK
fonte
2
Para aqueles que procuram como fazer isso em Fish shell ver stackoverflow.com/questions/30703860/... (embora esta questão não é para um shell específico)
Elias Lynn

Respostas:

2467

unset é o comando que você está procurando.

unset GNUPLOT_DRIVER_DIR
Peder Klingenberg
fonte
5
mas isso só funciona para uma sessão, que tal desabilitá-la definitivamente? ou talvez pesquisando onde a variável está definida, para que você possa excluí-la?
eLRuLL
31
Isso deve funcionar por instância do terminal. Geralmente, toda vez que uma janela do terminal é aberta, ele carrega variáveis ​​de vários locais, como ~ / .bashrc, ~ / .profile, etc. Quaisquer variáveis ​​definidas em uma instância do terminal não serão transferidas para outra. Se você tem uma variável que parece ser definida automaticamente toda vez que você abre o terminal, tente procurar nos vários arquivos ocultos em seu diretório pessoal. Ou, para ver onde está sendo definido, tente "grep -r <X> ~" onde <X> é o nome da variável. Isso pode demorar um pouco se você tiver muitos arquivos em seu diretório pessoal.
matt5784
1
Isso remove a variável do shell também. É a única maneira unexportde fazer T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
Olajorgenb
1
@olejorgenb Pelo menos no bash, você pode declare +x MYVARremover a exportação, mas manter o valor no shell atual.
Peder Klingenberg
4
O @PederKlingenberg também export -n MYWARfunciona no Bash.
Jarno
170

Passo a passo de criação e exclusão de uma variável de ambiente no bash:

Teste se a variável DUALCASE existe:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

Como não, crie a variável e exporte-a:

el@apollo:~$ DUALCASE=1
el@apollo:~$ export DUALCASE

Verifique se existe:

el@apollo:~$ env | grep DUALCASE
DUALCASE=1

Está lá. Então se livre disso:

el@apollo:~$ unset DUALCASE

Verifique se ainda está lá:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

A variável de ambiente exportada DUALCASE é excluída.

Comandos extras para ajudar a limpar suas variáveis ​​locais e de ambiente:

Redefina todas as variáveis ​​locais de volta ao padrão no login:

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 O comando limpou todas as variáveis ​​locais, mas não as variáveis ​​de ambiente.

Redefina todas as variáveis ​​de ambiente para o padrão no login:

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 O comando limpou todas as variáveis ​​de ambiente para o padrão no login.

Eric Leschinski
fonte
10
talvez echo $VARIABLEseja melhor que env | grep VARIABLE, é mais leve, pois não precisa imprimir todas as variáveis ​​e depois enviar sua saída para outro processo (grep). Além disso, env | VARIABLEpode capturar mais de uma variável que corresponda ao mesmo padrão. Além disso, echo $VARIABLEpermite completar o nome da variável pressionando <Tab> (se existir, isso também pode ser uma dica do que você quer fazer).
Rodrigo Gurgel
10
'env | grep VARIABLE 'é melhor que' echo $ VARIABLE 'porque eu posso dizer que ele realmente se foi
calasyr
8
@RodrigoGurgel, echo $VARIABLEnão informa se a VARIABLE é uma variável de shell (aqui chamada "variável local") ou uma variável de ambiente, que é o ponto principal da explicação.
hmijail lamenta os demitidos 4/10/16
4
Observe que env -i bashparece estar criando um subshell (pelo menos em um Mac) que pode ter consequências indesejadas.
22817 Mark Chackerian
2
@RodrigoGurgel usando echo não mostrará a variável existente definida como string ou nul vazia. a seu ponto, porém, seria uma maneira adequada de testar a variável env | grep -e '^VARNAME='.
Thomas
5

Como a pergunta original não menciona como a variável foi definida e como cheguei a esta página procurando esta resposta específica, estou adicionando o seguinte:

No shell C (csh / tcsh), existem duas maneiras de definir uma variável de ambiente:

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

A diferença no comportamento é que as variáveis ​​configuradas com o comando setenv são exportadas automaticamente para subshell enquanto as variáveis ​​configuradas com set não.

Para desarmar um conjunto de variáveis ​​com set , use

unset x

Para desarmar um conjunto de variáveis ​​com setenv , use

unsetenv x

Nota: em todas as opções acima, presumo que o nome da variável seja 'x'.

créditos:

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

G Eitan
fonte
Grande adição sobre as diferenças entre os subconjuntos set / setenv wrt!
níveis
4

isso também pode funcionar.

export GNUPLOT_DRIVER_DIR=
Nilesh K.
fonte
10
A variável ainda existe, mas contém uma sequência vazia, como você pode ver na saída do envcomando. Pode ser que o aplicativo que usa a variável não faça distinção entre variável de ambiente inexistente e vazia.
Palec
1
sim, ele conterá, isso foi apenas para remover valor e não para remover variável. Mas sim, pode-se usar - desmarque GNUPLOT_DRIVER_DIR.
Nilesh K.
Isso não funciona no caso da variável PAGER. Tentei desconfigurar minha configuração do PAGER export PAGER=, mas isso apenas desativou a paginação - todas as minhas páginas de manual foram despejadas diretamente no terminal. unset PAGERfez o truque, revertendo-o para o comportamento padrão.
Chad
1

Conforme mencionado nas respostas acima, unset GNUPLOT_DRIVER_DIRdeve funcionar se você tiver usado exportpara definir a variável. Se você o definiu permanentemente ~/.bashrcou ~/.zshrcsimplesmente a remoção de lá funcionará.

Rishabh Bohra
fonte