Если ваша работа предполагает делать вещи с помощью командной строки в Linux, то скорее всего, вы будете использовать оболочку Bash. Знаете ли вы, что есть среда, связанная с процессами, которые выполняются через оболочку? И, если вы хотите, вы можете настроить эту среду, специально для выполнения этой задачи. В этой статье мы рассмотрим утилиту командной строки env, она не только позволяет получить доступ к среде оболочки, но и позволяет вносить изменения в ней, как в случае необходимости.
Но прежде чем мы это сделаем, стоит отметить, что все команды и инструкции, упомянутые в данном руководстве, были протестированы на оболочке Bash, работающие на Ubuntu 16.04 LTS.
По определению, команда env позволяет запускать программу в измененной среде. Ниже приведен синтаксис команды, как уже упоминалось на странице man:
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
И вот что страница man говорит о env:
Set each NAME to VALUE in the environment and run COMMAND.
Примеры должны дать вам лучшее представление о том, как эта команда работает:
Bash среда, как вы уже знаете, состоит из записей VARNAME = VALUE. Чтобы получить доступ ко всем переменным окружения, а также значения, связанные с ними, выполните команду env без опции.
env
Вот вывод из приведенных выше команд в нашем случае:
root@destroyer:~# env SHELL=/bin/bash TERM=xterm USER=destroyer MAIL=/var/mail/destroyer PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin PWD=/root LANG=en_US SHLVL=1 HOME=/root LANGUAGE=en_US: LOGNAME=destroyer HISTTIMEFORMAT=%h %d %H:%M:%S _=/usr/bin/env
Ключевая особенность env предлагает возможность временно изменить условия для процесса. Например, мы создали небольшой исполняемый процесс который отображает значение переменной окружения USER при выполнении.
Вот вывод в обычном сценарии:
root@destroyer: ~/htf-dayly$ ./env USER: destroyer
Теперь, то что мы сделали, мы использовали команду ENV временно изменить значение переменной окружения USER c «destroyer» на «HTF» для исполняемого процесса. Ниже приводится команда, которую мы использовали в этом случае:
env USER=HTF ./env
А вот выход производится в этом случае:
root@destroyer: ~/htf-dayly$ env USR=HTF ./env USER: HTF
Таким образом, вы можете увидеть, что исполняемый файл возвращается новое значение.
Если вы хотите, вы можете также сделать, чтобы процесс игнорировал существующую/унаследованную среду, и начать с пустой вместо этого. Это может быть сделано с помощью вариант -i или —ignore-environment.
Например:
root@destroyer: ~/htf-dayly$ env -i ./env USER: SORRY, No value
В первом примере выше, был вывод строк, полученные с помощью команды env разделяются символом новой строки. Тем не менее, если вы хотите, вы можете сделать env использовать символ NUL как разделитель. Эта функция может быть доступна с помощью опции —null в командной строке.
env --null
Ниже приведен пример экрана:
root@destroyer:~# env --null SHELL=/bin/bashTERM=xtermUSER=destroyerMAIL=/var/mail/destroyerPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/binPWD=/rootLANG=en_USS HLVL=1HOME=/rootLANGUAGE=en_US:LOGNAME=destroyerHISTTIMEFORMAT=%h %d %H:%M:%S _=/usr/bin/envroot@destroyer:~#
Команда env производит следующие коды вывода: 0, 125, 126 и 127. Ниже приведены описания ошибок, связанных с ними:
0 if no COMMAND is specified and the environment is output 125 if ‘env’ itself fails 126 if COMMAND is found but cannot be invoked 127 if COMMAND cannot be found
В этом случае, если вы получите код ошибки, кроме упомянутых выше, то это состояние вывода возвращается в процессе/команде, которая была выполнена в модифицированной среде.
Если вы полный новичок командной строки, есть вероятность, что вы не будете требовать этого инструмента на ежедневной основе. Тем не менее, это не значит, что не стоит знать — на самом деле, env помогает во многих ситуациях. Примеры, которыми мы поделились в этой статье достаточно, чтобы дать вам понимание команды. Для получения дополнительной информации, используйте страницу man, или лучше, выполните следующую команду:
info coreutils env invocation