Хук VPN, які экспартуе канчатковую кропку API, змяняе асяроддзе працэсаў, якія ён запускае, а не тэрмінала, што ўжо быў адкрыты, калі тунель падняўся. Гэтае адзінае адрозненне тлумачыць большасць паведамленняў «інструмент усё яшчэ звяртаецца да публічнай канчатковай кропкі». Ёсць два працаздольныя месцы, куды можна паставіць наладу, і выбар залежыць ад таго, хто яе спажывае і як часта яна змяняецца. Параўнайце іх, перш чым дадаць яшчэ адзін скрыпт запуску.

Два месцы, дзе можа жыць налада

Варыянт першы — прэфікс у самой камандзе: значэнне існуе для аднаго выкліку і знікае разам з ім. Варыянт другі — экспарт унутры хука злучэння, які дасягае кожнага працэса, што хук запускае пасля гэтага моманту. Яны адрозніваюцца ахопам і тэрмінам жыцця, а не сінтаксісам, і гэтае адрозненне вырашае большасць збояў.

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

Табліца робіць хук танным на выгляд і хавае сапраўдны кошт: ён таксама выбірае прыватную канчатковую кропку для каманд, якія не маюць дачынення да задачы. Чытайце кожны радок як абмежаванне, а не як перавагу. Калі канчатковая кропка змяняецца ад задачы да задачы, прэфікс перамагае ў дакладнасці, нават калі каштуе аднаго націску.

Чаму хук не можа дасягнуць ужо адкрытай абалонкі

Зменныя асяроддзя перадаюцца працэсу ў момант стварэння вобраза працэса. Абалонка, якая стартавала да злучэння, захоўвае атрыманую копію, а экспарт, выкананы ўнутры хука, не з'яўляецца трансляцыяй для кожнага працэса на машыне. Яго атрымліваюць толькі ўласныя даччыныя працэсы хука. Даччыныя працэсы абалонкі бяруць тое, што абалонка трымае ў момант іх запуску, і менавіта таму адна і тая ж каманда можа працаваць у адным тэрмінале і не працаваць у іншым.

Тое ж датычыцца графічнага рэдактара. Яго хост пашырэнняў, убудаваны тэрмінал і фонавы моўны сервер адгалінаваліся пры запуску і трымаюць уласныя копіі. Паўторнае адкрыццё папкі не абавязкова перазапускае гэтых даччыных працэсаў, таму дададзеная налада так і не даходзіць.

Самы танны тэст — вывесці зменную з месца, дзе ўзнікае збой, а не з абалонкі, якая працуе. Калі працэс са збоем стартаваў да тунеля, экспарт не меў ні шанцу.

Форма для кожнай каманды, выпісаная

Прэфікс трымае выбар бачным у камандзе, якая яго выкарыстоўвае, і гэта дапамагае, калі канчатковая кропка змяняецца паміж задачамі:

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

Каманда прыведзена для прыкладу: my-work-tool — гэта запаўняльнік, а INTERNAL_API не з'яўляецца стандартам VPN, таму падстаўце дакументаваную наладу праграмы, якую вы сапраўды запускаеце, і свой ухвалены хост. Не стаўце токен або пароль у той жа радок, бо ён трапіць у гісторыю абалонкі.

Калі некалькі каманд належаць адной задачы, кароткі правераны скрыпт-абгортка задае зменныя і затым запускае іх. Гэта захоўвае адзінае азначэнне, не робячы значэнне глабальным для кожнай будучай каманды ў тэрмінале.

Перазагрузіце, перазапусціце або пакіньце як ёсць

Для інструмента, які ўжо працуе, аддайце перавагу яго ўласнай перазагрузцы або профілю працоўнай прасторы, калі ён ёсць. Інакш захавайце працу і перазапусціце кампанент, які чытае наладу, — часта гэта моўны сервер, а не акно рэдактара. Перазапуск акна з меркаваннем, што даччыныя працэсы пайшлі за ім, — вось чаму перазагрузка выглядае так, быццам не працуе.

Адключэнне — асобнае рашэнне. Прыпынак, закрыццё або перападлучэнне належаць праграме, і зменная канчатковай кропкі не кіруе гэтым. Стаўцеся да зменнай як да канфігурацыі, што выбірае адрас, а не як да правіла пра тое, які сеткавы трафік можна выкарыстоўваць пасля, і гэтыя дзве справы застануцца аддзельнымі.

Падобныя артыкулы