env -i: запуск программы в полностью “чистом” окруженииБольшинство программ наследуют десятки переменных окружения:
PATH, HOME, LANG, LD_LIBRARY_PATH, прокси, токены и многое другое.Иногда именно они становятся причиной странного поведения приложения.
▪️Посмотреть текущее окружение
env
или:
printenv
Вы увидите все переменные, которые будут унаследованы дочерними процессами.
▪️Запуск без окружения
Команда:
env -i bash
запустит новый Bash практически без переменных окружения.
Если выполнить:
envвывод окажется пустым или почти пустым.
▪️Передать только нужные переменные
Например:
env -i PATH=/usr/bin:/bin HOME=/tmp bash
Теперь программа получит только
PATH и HOME.Это особенно удобно при поиске ошибок.
▪️Практический пример
Есть скрипт:
./deploy.sh
У одного пользователя он работает, у другого - нет.
Проверяем:
env -i PATH=/usr/bin:/bin ./deploy.sh
Если проблема исчезла или, наоборот, воспроизвелась, причина, скорее всего, в одной из переменных окружения, а не в самом скрипте.
▪️Где ещё используется
• отладка CI/CD;
• проверка зависимостей от окружения;
• запуск сервисов в предсказуемых условиях;
• поиск проблем с
PATH, LANG, HOME и прокси.▪️Почему это важно
Ошибки, связанные с окружением, часто трудно воспроизвести: скрипт работает у одного администратора и ломается у другого.
env -i позволяет полностью исключить влияние наследуемых переменных и быстро понять, зависит ли программа от окружения больше, чем кажется.BashTex 📱 #bash #linux