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