ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Учебное пособие по команде env в Linux для начинающих (5 примеров)

Учебное пособие по команде env в Linux для начинающих (5 примеров)

Если ваша работа предполагает делать вещи с помощью командной строки в Linux, то скорее всего, вы будете использовать оболочку Bash. Знаете ли вы, что есть среда, связанная с процессами, которые выполняются через оболочку? И, если вы хотите, вы можете настроить эту среду, специально для выполнения этой задачи. В этой статье мы рассмотрим утилиту командной строки env, она не только позволяет получить доступ к среде оболочки, но и позволяет вносить изменения в ней, как в случае необходимости.

Но прежде чем мы это сделаем, стоит отметить, что все команды и инструкции, упомянутые в данном руководстве, были протестированы на оболочке Bash, работающие на Ubuntu 16.04 LTS.

 

Команда env в Linux

По определению, команда env позволяет запускать программу в измененной среде. Ниже приведен синтаксис команды, как уже упоминалось на странице man:

env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

 

И вот что страница man говорит о env:

Set each NAME to VALUE in the environment and run COMMAND.

 

Примеры должны дать вам лучшее представление о том, как эта команда работает:

 

Q1. Как получить доступ ко всем переменным окружения, используя команду env?

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

 

Q2. Как временно изменить окружающую среду с помощью 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

 

Таким образом, вы можете увидеть, что исполняемый файл возвращается новое значение.

 

Q3. Как сделать, чтобы процесс игнорировал существующую среду с помощью env?

Если вы хотите, вы можете также сделать, чтобы процесс игнорировал существующую/унаследованную среду, и начать с пустой вместо этого. Это может быть сделано с помощью вариант -i или –ignore-environment.

Например:

root@destroyer: ~/htf-dayly$ env -i ./env
USER: SORRY, No value

 

Q4. Как сделать при помощи команды env использовать NUL вместо символа новой строки при выходе?

В первом примере выше, был вывод строк, полученные с помощью команды 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:~#                                                  

 

Q5. Как узнать ошибку, основываясь на состоянии команды вывода env?

Команда 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

 

 

Exit mobile version