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, тому підставте документоване налаштування програми, яку ви справді запускаєте, і свій затверджений хост. Не розміщуйте токен або пароль у тому самому рядку, бо вони потрапляють в історію оболонки.

Коли кілька команд належать до одного завдання, короткий перевірений скрипт-обгортка задає змінні, а потім запускає їх. Так залишається єдине визначення, і значення не стає глобальним для кожної майбутньої команди в терміналі.

Перезавантажте, перезапустіть або залиште як є

Для вже запущеного інструмента віддавайте перевагу його власному перезавантаженню або профілю робочої області, якщо він є. Інакше збережіть роботу й перезапустіть компонент, що читає налаштування, а це часто мовний сервер, а не вікно редактора. Перезапуск вікна з припущенням, що дочірні процеси пішли за ним, — це саме те, через що перезавантаження виглядає неробочим.

Відключення — окреме рішення. Пауза, закриття або повторне підключення належать застосунку, і змінна кінцевої точки ними не керує. Ставтеся до змінної як до конфігурації, що вибирає адресу, а не як до правила про те, який мережевий трафік можна використовувати згодом, і ці дві справи залишаються роздільними.

Схожі статті