Um hook de VPN que exporta um ponto final de API altera o ambiente dos processos que inicia, não o do terminal que já estava aberto quando o túnel subiu. É essa única distinção que explica a maioria dos relatos «a ferramenta continua a chamar o ponto final público». Há dois locais viáveis para colocar a definição, e a escolha depende de quem a consome e da frequência com que muda. Compare os dois antes de acrescentar outro script de arranque.

Dois locais onde a definição pode viver

A primeira opção é um prefixo no próprio comando: o valor existe para essa única invocação e desaparece com ela. A segunda é uma exportação dentro do hook de ligação, que chega a cada processo que o hook inicia depois desse ponto. Diferem no alcance e na duração, não na sintaxe, e essa diferença decide a maioria das falhas.

PropertyPrefix on the commandExport from the hook
Who receives itThat invocation onlyChildren the hook starts
LifetimeUntil the process exitsUntil the hook's own session ends
LeakageScoped to one commandApplies to later commands in that session
Repeat costEvery invocationOnce per connection
Works for an open editorNo, unless the editor is started with itNo

A tabela faz o hook parecer barato e esconde a fatura real: também escolhe um ponto final privado para comandos que nada têm a ver com a tarefa. Leia cada linha como uma restrição e não como uma preferência. Se o ponto final muda por tarefa, o prefixo ganha em precisão mesmo custando uma tecla.

Porque o hook não consegue chegar a uma shell já aberta

As variáveis de ambiente são entregues a um processo quando a imagem do processo é criada. Uma shell iniciada antes da ligação conserva a cópia que recebeu, e uma exportação executada dentro do hook não é uma difusão para todos os processos da máquina. Só os filhos próprios do hook a herdam. Os filhos próprios de uma shell tomam o que a shell tem no momento em que arrancam, e é por isso que o mesmo comando pode funcionar num terminal e falhar noutro.

O mesmo se aplica a um editor gráfico. O anfitrião de extensões, o terminal integrado e o servidor de linguagem em segundo plano foram bifurcados no arranque e têm cópias próprias. Reabrir uma pasta não reinicia necessariamente esses filhos, por isso a definição acrescentada continua a nunca chegar.

O teste mais barato é imprimir a variável a partir do local que falha, não da shell que funciona. Se o processo que falha arrancou antes do túnel, a exportação nunca teve oportunidade.

A forma por comando, escrita

Um prefixo mantém a escolha visível no comando que a usa, o que ajuda quando o ponto final muda entre tarefas:

env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool

O comando é ilustrativo: my-work-tool é um marcador de posição e INTERNAL_API não é um padrão de VPN, por isso substitua pela definição documentada do programa que executa realmente e pelo seu próprio anfitrião aprovado. Não coloque um token ou uma palavra-passe na mesma linha, porque ficam no histórico da shell.

Quando vários comandos pertencem a uma só tarefa, um script de envolvimento curto e revisto define as variáveis e depois inicia-os. Assim mantém-se uma única definição sem tornar o valor global para todos os comandos futuros no terminal.

Recarregue, reinicie ou deixe estar

Para uma ferramenta que já está a correr, prefira a sua própria recarga ou o perfil de espaço de trabalho quando tem um. Caso contrário, guarde o trabalho e reinicie o componente que lê a definição, que é muitas vezes um servidor de linguagem e não a janela do editor. Reiniciar a janela e assumir que os processos filhos a acompanharam é precisamente a razão pela qual uma recarga parece não funcionar.

A desligação é uma decisão separada. Pausar, fechar ou voltar a ligar pertence à aplicação, e a variável do ponto final não a controla. Trate a variável como configuração que escolhe um endereço, não como uma regra sobre que tráfego de rede pode ser usado depois, e as duas questões continuam separáveis.

Artigos relacionados