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?


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

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.


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


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=

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á.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.