Reverter '.' ou 'fonte'

7

Eu acidentalmente obtive o ambiente errado de um script. Existe alguma maneira de 'anular' ou, em outras palavras, para reverter e restaurar o ambiente anterior?

A resposta óbvia é começar de uma sessão de shell limpa, é claro, mas estou curioso para saber se há outra solução.

Atualização: eu estava me referindo apenas a um script que define algumas variáveis.

    
por UVV 07.11.2017 / 11:50

3 respostas

12

Não, não há um método geral para desfazer os efeitos de um script de origem (ou mesmo de "meramente" executar um). Isso é um corolário do fato de que existem comandos irreversíveis (por exemplo, exclusão de arquivos). Se o seu script contiver um comando irreversível, os efeitos do fornecimento desse script também serão irreversíveis.

    
por 07.11.2017 / 12:04
3

Is there any way to 'unsource' it or in other words to revert it and restore previous environment?

Não, não há maneira automática em geral.

No entanto, não sabemos o que você é source -ed. Talvez seja simples o suficiente para ser trivial para desfazer (por exemplo, algo que apenas altere sua PATH de um grupo anterior bem conhecido).

    
por 07.11.2017 / 11:56
3

Se você souber antecipadamente que deseja fazer isso, poderá executar o comando source em um subshell e reverter seus efeitos (na medida em que estejam com o escopo definido shell ou variáveis de ambiente) ao sair dessa subcamada.

Assim, se você executar:

(source set-variables; run-command-with-variables); run-command-without-variables

... então run-command-with-variables terá essas variáveis configuradas, mas run-command-without-variables não.

Também é possível identificar quais funções shell foram definidas pela origem de um script, verificando os metadados associados a essas funções, de modo que se poderia teoricamente escrever uma função shell ou um script que anule todas as outras funções definidas dentro de um determinado arquivo (parametrizado). Para variáveis não funcionais, no entanto, não há informações armazenadas para permitir que elas sejam desconfiguradas (muito menos identificando valores anteriores).

    
por 07.11.2017 / 19:09