Como desarmar uma variável na linha de comando?

80

Eu tentei o seguinte comando para definir o proxy yaourt:

export ALL_PROXY=http://proxy.example.com:8080

A questão é como desabilitar o proxy yaourt? Em geral, como posso desarmar o valor de uma variável no shell atual?

Hamed Kamrava
fonte
7
Tenteunset ALL_PROXY
coffemug
O @coffeMug também pode transformar isso em uma resposta, você também pode roubar algumas informações a partir daqui: stackoverflow.com/a/12263914/1081936
terdon
além da resposta aceita, se houver um comando que você executa frequentemente que usa uma variável de ambiente que você prefere não definir ou alterar durante o restante da sessão do shell, você pode executá-lo como: $ ALL_PROXY=http://proxy.example.com:8080 yaourtisso definirá o envvar apenas para o comando executado. Você pode colocar quantas FOO=bar BAZ=batvariáveis ​​desejar antes da execução do comando.
onlynone

Respostas:

113

Para remover uma variável de ambiente, execute

unset ALL_PROXY

Observe que uma variável de ambiente só entra em vigor em um programa e no programa que é iniciado. Se você definir uma variável de ambiente em uma janela do shell, ela não afetará outras janelas do shell.

Se você adicionou export ALL_PROXY=…a um arquivo de inicialização, remova-o de lá.

Você pode executar exportsem argumentos para ver quais variáveis ​​de ambiente estão definidas no shell atual.

Lembre-se de que para disponibilizar uma variável de shell para os programas iniciados por esse shell, é necessário exportá-la, executando export VARapós a atribuição VAR=VALUEou combinando as duas ( export VAR=VALUE).

Gilles
fonte
19

Para desarmar uma variável vinculada no bash use unset VARIABLE( unset ALL_PROXYno seu caso). Este comando realmente exclui a variável. Você também pode definir o valor de uma variável como vazio por

VARIABLE=

ou

VARIABLE=""

A diferença é que os dois últimos comandos não excluem a variável. Você pode ver a diferença usando o -usinalizador com setpara forçá-lo a tratar as variáveis ​​não definidas como um erro ao substituir:

/home/user1> var=""
/home/user1> echo $var

/home/user1> set -u
/home/user1> echo $var

/home/user1> unset var
/home/user1> echo $var
-bash: var: unbound variable

No exemplo acima, o bash reclama varé ilimitado (após desabilitar seu valor), que é o erro esperado (observe que isso não ocorre no segundo comando de eco, o que significa que varpossui um valor que é emptyou null).

coffeMug
fonte
e se eu tiver uma variável no meu arquivo de script de shell e for fonte desse arquivo, como vou desmarcá-lo?
Abhinav
@Abhinav usar unsetno script. O mesmo se aplica.
coffemug