Как показать текущее значение переменной среды?

Когда я проверю среду моей системы, появится много переменных окружающей среды. Как я могу просто найти определенную переменную?

Книга, которую я читаю, гласит:

Иногда количество переменных в вашей среде становится довольно большим, настолько, что вы не хотите видеть все значения, отображаемые, когда вас интересует только один. Если это так, вы можете использовать команду echo для отображения текущего значения переменной среды.

Как это сделать в терминале Linux?

4 Solutions collect form web for “Как показать текущее значение переменной среды?”

Просто:

 echo "$VARIABLENAME" 

Например, для переменной среды $HOME используйте:

 echo "$HOME" 

Которая затем печатает нечто похожее:

 /home/username 

Изменить : в соответствии с комментарием Стефана Хазеласа , может быть, лучше использовать printenv вместо echo :

 printenv HOME 

Выполняя:

printenv

Вы увидите все переменные среды. Для получения дополнительной информации вы можете посмотреть:

https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps

Важно понимать, что каждый процесс имеет свой собственный набор переменных окружения.

Когда процесс вызывает системный вызов fork() , создается второй процесс ( дочерний ), идентичный первому ( родительскому ) (эта копия включает среду, которая находится чуть выше стека (или чуть ниже, в зависимости от того, как вы думаете стеков :-) – но в unix / linux стек растет с высоких адресов).

Обычно дочерний процесс вызывает системный вызов execve() , который отбрасывает все в своей (виртуальной) памяти и восстанавливает его из разделов кода и данных в указанном двоичном файле.

Однако, когда он восстанавливает стек, он копирует строки окружения и аргументов, переданные execve() в стек сначала (в указанном порядке), перед вызовом функции main() (большая часть работы выполняется в коде начальной загрузки crt0 после возврата execve()точку входа, указанную в двоичном формате)).

Существуют оболочки для execve() вызова execve() в библиотеке C, которые передают текущую среду (то есть копию родительской среды) вместо того, чтобы ее вызывающий вызывал (так как на самом деле ребенок наследует среду родителя) – см. environ(7) .

Попробуйте запустить (как root) команду ps axeww | less ps axeww | less … это покажет вам среду для всех процессов! Интересным является идентификатор процесса 1 (т.е. процесс init – первый процесс, созданный ядром во время загрузки).

Если вы хотите посмотреть на среду для определенного процесса (и знаете, что это идентификатор процесса), попробуйте запустить команду cat /proc/<PID>/environ (заменяя <PID> идентификатором процесса).

Обратите внимание: если процесс имеет достаточно привилегий, он может переписать собственный стек, что может затруднить понимание его среды – в выводе ps вы увидите некоторые процессы-демоны.

Но в конце концов, вся эта вафель сводится к тому, что было сказано выше, если вы хотите посмотреть текущее значение определенной переменной среды в своем процессе оболочки, просто используйте (встроенную) команду echo "$<NAME>" (заменив <NAME> на имя интересующей вас переменной среды) … просто помните, что одна и та же переменная может иметь другое значение или вообще не существовать в другом процессе.

Вы можете получить то, что ищете, с export :

 export | grep HOME 

Отобразит содержимое переменной $HOME .

  • Могу ли я установить несколько каталогов для $ HOME?
  • sudo как другой пользователь с их окружением
  • Как запустить cronjob в моей обычной среде?
  • Почему переменная окружения частично задана?
  • Обнаружение X-сессии в сценарии bash (.bashrc и т. Д.)
  • Как получить переменную среды из имени строки в KSH
  • Как предотвратить использование оболочки звонящего в sudo
  • Как читать значение переменной, где имя переменной - значение другой переменной
  • Отправьте команду на выполняемый сеанс tmux (например, screen -X)
  • Оболочки Bash с различными переменными среды
  • Является ли переменная среды $ HOME всегда заданной в системе Linux?
  • Linux и Unix - лучшая ОС в мире.