Definições da ferramenta VPN: ambiente no arranque ou exportação no hook?
Um hook inicia os seus próprios filhos, não a shell que já abriu. Um ambiente no arranque mantém o ponto final privado apenas no único comando que precisa dele.
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.
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
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.