linux
environment
env
Показать переменные окружения или запустить программу в изменённом окружении
Описание
Команда env выводит все переменные окружения текущей сессии. Каждый процесс в Linux наследует копию окружения родителя — список пар ИМЯ=ЗНАЧЕНИЕ, которые формируют рабочий контекст: пути к программам (PATH), домашний каталог (HOME), язык системы (LANG) и многое другое.
Помимо просмотра, env позволяет запустить команду с временно изменённым окружением — не меняя текущую сессию. Это удобно при отладке, тестировании или запуске программ, требующих особых переменных.
Важно: env показывает только экспортированные переменные (помеченные через export). Локальные переменные оболочки (без export) в списке не появятся.
Синтаксис
# Вывести все переменные окружения
env
# Фильтровать по имени через grep
env | grep VAR_NAME
# Запустить команду с временной переменной (не меняет текущую сессию)
env VAR=value command
# Запустить в полностью пустом окружении
env -i command
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-i, --ignore-environment |
Запустить команду в полностью пустом окружении (без наследования переменных) | env -i bash |
-u NAME, --unset=NAME |
Убрать переменную NAME из окружения перед запуском команды (только для этого запуска) |
env -u LANG python3 script.py |
-0, --null |
Разделять строки вывода нулевым символом (\0) вместо перевода строки — удобно для xargs -0 |
env -0 | xargs -0 -n1 |
--help |
Показать справку по использованию и выйти | env --help |
--version |
Показать версию утилиты и выйти | env --version |
Паттерны использования
Просмотр всех переменных окружения
# Вывести все переменные текущей сессии env # PATH=/usr/local/bin:/usr/bin:/bin # HOME=/home/user # LANG=en_US.UTF-8 # TERM=xterm-256color # ...и многое другое
Фильтрация своей переменной
# Проверить, объявлена ли переменная export ANDREW_VAR=mygroup env | grep ANDREW # ANDREW_VAR=mygroup # Фильтрация по PATH env | grep PATH # PATH=/usr/local/bin:/usr/bin:/bin
Запуск с временной переменной
# Запустить скрипт с переопределённой переменной # Текущая сессия НЕ изменяется env MY_VAR=hello ./script.sh # Несколько переменных сразу env DB_HOST=localhost DB_PORT=5432 python3 app.py
Запуск в чистом окружении
# Проверить поведение программы без окружения env -i bash --norc --noprofile # (запустится bash без переменных родителя) # Убрать одну переменную для запуска env -u HOME python3 setup.py
Советы и предупреждения
Совет: env vs printenv
env (без аргументов) и printenv выводят примерно одно и то же — экспортированные переменные. Разница: printenv VARNAME выводит только одну переменную, env VAR=val cmd запускает команду с изменённым окружением. Для просмотра используйте любую; для запуска с переменной — только env.
Совет: только экспортированные переменные
env показывает только переменные, помеченные через export. Если вы объявили MY_VAR=hello без export, в выводе env её не будет. Чтобы переменная попала в окружение и была видна дочерним процессам — всегда используйте export MY_VAR=hello.
Совет: shebang с env для переносимых скриптов
В bash-скриптах часто пишут
В bash-скриптах часто пишут
#!/usr/bin/env bash вместо #!/bin/bash. Это позволяет системе найти bash через PATH, что делает скрипт переносимым между системами, где bash находится в разных местах.
⚠️ Проверить по документации