Inställningar för VPN-verktyget: miljö vid start eller export i en hook?
En hook startar sina egna barn, inte det skal du redan har öppnat. En miljö vid start håller den privata slutpunkten bara på det enda kommando som behöver den.
En VPN-hook som exporterar en API-slutpunkt ändrar miljön för de processer den startar, inte för den terminal som redan var öppen när tunneln kom upp. Just den skillnaden förklarar de flesta rapporterna om att „verktyget fortfarande anropar den publika slutpunkten“. Det finns två användbara platser för inställningen, och valet beror på vem som använder den och hur ofta den ändras. Jämför dem innan du lägger till ännu ett startskript.
Två platser där inställningen kan bo
Alternativ ett är ett prefix på själva kommandot: värdet finns för just det anropet och försvinner med det. Alternativ två är en export inne i anslutningshooken, som når varje process som hooken startar efter den punkten. De skiljer sig i räckvidd och livslängd, inte i syntax, och den skillnaden avgör de flesta felen.
| 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 |
Tabellen får hooken att verka billig och döljer den verkliga kostnaden: den väljer också en privat slutpunkt för kommandon som inte har något med uppgiften att göra. Läs varje rad som en begränsning, inte som en preferens. Om slutpunkten ändras per uppgift vinner prefixet på precision även om det kostar ett tangenttryck.
Varför hooken inte kan nå ett skal som redan är öppet
Miljövariabler överlämnas till en process när processbilden skapas. Ett skal som startade före anslutningen behåller den kopia det fick, och en export som körs inne i hooken är inte en utsändning till varje process på maskinen. Bara hookens egna barn ärver den. Ett skals egna barn tar vad skalet har i det ögonblick de startar, och därför kan samma kommando fungera i en terminal och misslyckas i en annan.
Samma sak gäller en grafisk editor. Dess tilläggsvärd, den inbyggda terminalen och språkservern i bakgrunden forgrenades vid start och har egna kopior. Att öppna en mapp igen startar inte nödvändigtvis om de barnen, så inställningen du lade till kommer fortfarande aldrig fram.
Det billigaste testet är att skriva ut variabeln från platsen som misslyckas, inte från skalet som fungerar. Om processen som misslyckas startade före tunneln hade exporten aldrig en chans.
Formen per kommando, utskriven
Ett prefix håller valet synligt i kommandot som använder det, vilket hjälper när slutpunkten ändras mellan uppgifter:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Kommandot är bara ett exempel: my-work-tool är en platshållare och INTERNAL_API är ingen VPN-standard, så byt ut det mot den dokumenterade inställningen för programmet du faktiskt kör och mot din egen godkända värd. Sätt inte en token eller ett lösenord på samma rad, för de hamnar i skalets historik.
När flera kommandon hör till en uppgift sätter ett kort granskat omslagsskript variablerna och startar dem sedan. Det behåller en enda definition utan att göra värdet globalt för varje framtida kommando i terminalen.
Läs in igen, starta om eller låt det vara
För ett verktyg som redan kör, föredra dess egen omladdning eller arbetsyteprofil när det har en. Annars spara arbetet och starta om komponenten som läser inställningen, vilket ofta är en språkserver och inte editorfönstret. Att starta om fönstret och anta att barnprocesserna följde med är just därför en omladdning ser ut att inte fungera.
Frånkoppling är ett eget beslut. Pausa, stänga eller återansluta hör till programmet, och slutpunktsvariabeln styr inte det. Behandla variabeln som konfiguration som väljer en adress, inte som en regel om vilken nätverkstrafik som får användas efteråt, och de två frågorna förblir åtskiljbara.