Операционная система | Unix, Unix-like, Inferno |
---|---|
Тип | Команда |
Лицензия | coreutils : GPLv3+ |
env
- это команда shell для Unix и Unix-подобные операционные системы. Он используется либо для печати списка переменных среды, либо для запуска другой утилиты в измененной среде без необходимости изменения существующей в настоящее время среды. Используя env
, переменные могут быть добавлены или удалены, а существующие переменные могут быть изменены путем присвоения им новых значений.
На практике env
имеет другое распространенное использование. Он часто используется сценариями оболочки для запуска правильного интерпретатора . При таком использовании окружающая среда обычно не изменяется.
Версия env
входящий в состав GNU coreutils, был написан Ричардом Млинариком, Дэвидом Маккензи и Ассафом Гордоном. Впервые он появился в 4.4BSD и является частью POSIX.1 (только с параметром -i).
GNU env был расширен для обработки сигналов и текущего env FreeBSD поддерживает настраиваемый путь поиска. В обеих версиях есть расширения: -u для отмены установки переменных и -S для разделения аргументов (в основном в shebang).
Чтобы распечатать список всех переменных среды, просто запустите env без аргументов:
env
Чтобы очистить среду (создать новую среду без каких-либо существующих переменных среды) для новой оболочки:
env -i / bin / sh
Чтобы запустить приложение X xcalc и отобразить его на другом дисплее:
env DISPLAY = foo.bar: 1.0 xcalc
Обратите внимание, что это использование env часто не требуется, поскольку большинство оболочек поддерживают установку переменных среды перед командой:
DISPLAY = foo.bar: 1.0 xcalc
env также может использоваться в строке hashbang скрипта, чтобы разрешить интерпретатор для поиска через PATH. Например, вот код очень простого скрипта Python :
#! / Usr / bin / env python3 print ("Hello, World!")
В этом примере / usr / bin / env
- это полный путь команды env
. Окружающая среда не изменена.
Обратите внимание, что можно указать интерпретатор без использования env
, указав полный путь к интерпретатору python
. Проблема с этим подходом заключается в том, что в разных компьютерных системах точный путь может отличаться. Вместо использования env
, как в примере, интерпретатор ищется и располагается во время запуска скрипта (точнее, env
выполняет системный вызов execvp
, который определяет местонахождение интерпретатора и запускает его). Это делает сценарий более переносимым, но также увеличивает риск выбора неправильного интерпретатора, поскольку он ищет совпадения в каждом каталоге на пути поиска исполняемых файлов. Он также страдает той же проблемой, поскольку путь к двоичному файлу env
также может отличаться для каждой машины.
В Wikibook Руководство по Unix есть страница по теме : Commands |
env
: установите среду для вызова команд - Справочник по командам и служебным программам, Единая спецификация UNIX, Выпуск 7 из Открытого Группа env (1)
– Inferno Общие команды Руководство env (1)
: запустить программу в измененной среде - OpenBSD Общие команды Вручную env(1)
: установить и распечатать среду - NetBSD Общие команды Вручную