Nastavenia nástroja VPN: prostredie pri spustení alebo export v hooku?
Hook spúšťa svoje vlastné potomky, nie shell, ktorý ste už otvorili. Prostredie pri spustení drží súkromný koncový bod len v tom jedinom príkaze, ktorý ho potrebuje.
VPN hook, ktorý exportuje koncový bod API, mení prostredie procesov, ktoré spúšťa, nie prostredie terminálu, ktorý bol už otvorený, keď sa tunel zdvihol. Práve tento jediný rozdiel vysvetľuje väčšinu hlásení „nástroj stále volá verejný koncový bod“. Existujú dve použiteľné miesta pre nastavenie a výber závisí od toho, kto ho spotrebúva a ako často sa mení. Porovnajte ich, skôr než pridáte ďalší spúšťací skript.
Dve miesta, kde nastavenie môže žiť
Prvá možnosť je prefix na samotnom príkaze: hodnota existuje len pre to jedno volanie a s ním zmizne. Druhá možnosť je export vnútri pripojovacieho hooku, ktorý zasiahne každý proces, ktorý hook od tej chvíle spustí. Líšia sa dosahom a životnosťou, nie syntaxou, a tento rozdiel rozhoduje väčšinu zlyhaní.
| 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 |
Tabuľka robí hook lacným a skrýva skutočný účet: vyberá súkromný koncový bod aj pre príkazy, ktoré s úlohou nemajú nič spoločné. Čítajte každý riadok ako obmedzenie, nie ako preferenciu. Ak sa koncový bod mení podľa úlohy, prefix víťazí v presnosti, aj keď stojí jedno stlačenie klávesu.
Prečo hook nedosiahne na už otvorený shell
Premenné prostredia sa procesu odovzdávajú pri vytváraní obrazu procesu. Shell, ktorý začal pred pripojením, si drží kópiu, ktorú dostal, a export vykonaný vnútri hooku nie je vysielanie do každého procesu na stroji. Dedia ho len vlastné potomky hooku. Vlastné potomky shellu preberajú to, čo shell drží v okamihu ich spustenia, a preto ten istý príkaz môže fungovať v jednom termináli a zlyhať v inom.
To isté platí pre grafický editor. Jeho hostiteľ rozšírení, vstavaný terminál a jazykový server na pozadí sa pri spustení rozdelili a držia si vlastné kópie. Opätovné otvorenie priečinka tieto potomky nemusí reštartovať, takže pridané nastavenie stále nikdy nedorazí.
Najlacnejší test je vypísať premennú z miesta, ktoré zlyháva, nie zo shellu, ktorý funguje. Ak zlyhávajúci proces začal pred tunelom, export nemal žiadnu šancu.
Forma pre jednotlivý príkaz, rozpísaná
Prefix drží voľbu viditeľnú v príkaze, ktorý ho používa, čo pomáha, keď sa koncový bod medzi úlohami mení:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
Príkaz je len ilustratívny: my-work-tool je zástupný názov a INTERNAL_API nie je štandard VPN, preto doplňte zdokumentované nastavenie programu, ktorý skutočne spúšťate, a svoj schválený hostiteľ. Nedávajte token ani heslo na ten istý riadok, lebo skončia v histórii shellu.
Keď k jednej úlohe patrí viac príkazov, krátky skontrolovaný obaľovací skript nastaví premenné a potom ich spustí. Tým zostáva jediná definícia, bez toho aby sa hodnota stala globálnou pre každý budúci príkaz v termináli.
Znova načítajte, reštartujte alebo to nechajte tak
Pre nástroj, ktorý už beží, dajte prednosť jeho vlastnému znovunačítaniu alebo profilu pracovného priestoru, ak ho má. Inak uložte prácu a reštartujte komponent, ktorý nastavenie číta, a to je často jazykový server, nie okno editora. Reštartovanie okna s domnienkou, že potomkovia ho nasledovali, je dôvod, prečo znovunačítanie vyzerá, akoby nefungovalo.
Odpojenie je samostatné rozhodnutie. Pozastavenie, zatvorenie alebo opätovné pripojenie patrí aplikácii a premenná koncového bodu to neriadi. Berte premennú ako konfiguráciu, ktorá volí adresu, nie ako pravidlo o tom, aká sieťová prevádzka sa smie potom použiť, a obe otázky zostávajú oddeliteľné.