Eu quero saber como limpar todas as variáveis que defini no prompt de comando sem fechar o terminal?
por exemplo, se eu definir uma variável no prompt de comando como:
$ a=1
agora eu quero excluir a variável $a
(e muitas outras variáveis definidas de maneira semelhante) sem fechar o terminal. Eu poderia usar, unset
mas será agitado se houver grande não. de variáveis
shell
environment-variables
Edward Torvalds
fonte
fonte
exec "$0"
talvez - mas é difícil dizer o que você quer dizer com global .$var
comvar=$(declare -p +F);
, em seguida, passa isso como um argumento para uma função que fazecho "${2%%=*}".
Essa resposta tem alguns problemas com dimensão - mas deve funcionar se o ambiente não é enorme.Respostas:
Se você faz (GNU coreutils)
você usará um ambiente novo e fresco
fonte
exec "$0"
?$0
é o argumento zeroth para um shell executado. Então, se você estiver executandobash
$0
ébash
(provavelmente - que poderia ser-bash
em um-l
caso de concha ogin dependendo da versão) . Se você estiver executando um script com um#!/bin/bash
bangline,$0
é o caminho para o script.exec "$0"
provavelmente é mais flexível, masexec bash
é mais explícito. Se você digitar esse comando em um terminal,bash
deverá reconhecê-lo em um ambiente interativo e fazer o equivalente abash -i
- o que também executará seu~/.bashrc
arquivo.export a=123
, essa variável é herdada ...Você pode usar
env
, que é fornecido pelo GNU coreutils (normalmente pré-instalado nos sistemas GNU / Linux):exec env --ignore-environment /bin/bash
A chamada do sistema exec é para que seu processo atual seja substituído no local pela nova versão sem ambiente do seu shell.
Isso tem o benefício de também limpar quaisquer variáveis de ambiente exportadas .
fonte
export PATH=$PATH:~/foo
, certo?