Что такое переменные окружения и PATH и почему команда «не найдена»?
- command not found — что делать?
- Как задать переменную окружения?
Переменные окружения — пары «имя=значение», которые процесс получает от родителя: настройки, пути, секреты. Задать для текущей сессии и дочерних процессов — export NAME=value, для одной команды — NAME=value команда, посмотреть — echo $NAME или env. PATH — список каталогов через двоеточие, где оболочка ищет программы. «command not found» значит, что программы нет ни в одном каталоге PATH: не установлена, установлена в другое место или не активировано окружение (venv).
- which команда — откуда берётся программа
- Постоянно — в ~/.bashrc или ~/.profile, затем открыть новую сессию
- Программы из текущего каталога запускают как ./script.sh — . в PATH нет
А ещё Переменные окружения не видны другим уже запущенным процессам
Подробно
Пример:
export DATABASE_URL=postgres://localhost/app
python app.py # увидит DATABASE_URL
echo $PATH
which python
export PATH="$HOME/.local/bin:$PATH"
Секреты: в переменных удобно передавать пароли приложению, но не печатать их в логи и не коммитить файлы .env.
Что хотят услышать
- export и область видимости переменных.
- PATH и поиск программ.
- Причины command not found, which.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗export меняет переменную во всех уже запущенных процессах
- ✗Текущий каталог всегда входит в PATH
- ✗У файла программы нет права на исполнение, хотя каталог есть в PATH
- ✓Программы нет ни в одном каталоге из PATH: не установлена или лежит в другом месте
Разбор темы
- Командная строка — файлы, поиск, окружение и SSH
Навигация и работа с файлами, grep и пайпы, права доступа, переменные окружения и PATH, вход по SSH-ключам.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.