Меню Рубрики

Linux присвоить значение переменной

Как присвоить переменной вывод команды в Bash

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

1. Используя обратные кавычки (апострофы). Пример кода:

Для этого варианта нужно помнить следующее: не перепутайте обратные кавычки с одиночными кавычками. А ещё использование этого синтаксиса считается теперь устаревшим (но везде работающим).

2. В дополнение к обратным кавычкам можно использовать $(). Преимуществом данного способа является возможность вложенности.

Использование кавычек («) имеет смысл при возможности появления значений в несколько строк.

Ещё одним важным отличием $() от двойных кавычек является то, что при обращении к переменной, если ей присвоено значение $(), она пересчитывается каждый раз. А если значение переменной определено командой внутри обратных кавычек, то это значение считается только один раз (при присвоении), а затем только используется.

3. Можно создать пользовательскую функцию, содержащую необходимые команды, и использовать название функции вместо имени переменной. Пример:

Вызывать нужно по имени функции (в данном случае func).

4. И ещё более экзотический вариант – использование eval:

Источник

Как установить и посмотреть переменные окружения Linux

В системах на базе Linux и Unix переменные среды представляют собой набор именованных динамических значений. Они хранятся в системе и используются приложениями, запущенными в оболочках. Проще говоря, переменная среды — это переменная с именем и связанным значением, доступная из ОС.

Переменные среды позволяют настраивать работу системы и поведение приложений в ней. Например, переменная среды может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или языковых параметрах системы и раскладки клавиатуры. В этом руководстве мы объясним, как смотреть и устанавливать переменные среды и оболочки.

Переменные среды и переменные оболочки

Обычно, переменные имеют такой формат:

Несколько основных правил для работы с переменными:

  • Имена переменных чувствительны к регистру. Все переменные среды должны называться С ЗАГЛАВНОЙ БУКВЫ.
  • Чтобы назначить несколько значений для одной переменной используйте знак «двоеточия» в качестве разделителя.
  • Символ «=» не должны окружать пробелы.

Переменные можно классифицировать на две основные категории: переменные среды и переменные оболочки:

  • Переменные среды — это такие переменные, которые доступны для всей системы и наследуются всеми дочерними процессами и оболочками.
  • Переменные оболочки(shell) — переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как zsh и bash, имеет свой собственный набор внутренних переменных.

Есть несколько доступных команд, которые позволяют вам устанавливать и просматривать переменные среды в Linux:

  • env — Эта команда позволяет запускать другую программу в пользовательской среде без изменения текущей. Если использовать её без дополнительных аргументов, она выведет список текущих переменных среды.
  • printenv — Команда выведет на экран все или часть переменных.
  • set — Команда устанавливает или отменяет переменные оболочки. Если её использовать без аргумента, тогда она выведет список всех переменных, включая переменные окружения и оболочки, а также некоторые функции оболочки.
  • unset — Удаляет переменные оболочки и среды.
  • export — Устанавливает переменные среды.

Список переменных среды

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

Например, чтобы отобразить значение переменной среды HOME, вы должны выполнить:

Выходные данные выведут домашний путь текущего пользователя системы:

Вы также можете передавать команде printenv более одного аргумента:

Если вы запустите команду printenv или env без аргументов, тогда вы получите список всех переменных среды:

Ниже приведены несколько наиболее популярных имен переменных среды:

  • USER — Текущий пользователь системы.
  • HOME — Домашняя директория пользователя.
  • EDITOR — Редактор по умолчанию. Это редактор, который будет использоваться при вводе edit в терминале.
  • SHELL — Путь к оболочке текущего пользователя, такой как bash или zsh.
  • LOGNAME — Имя текущего пользователя
  • PATH — Список каталогов, которые нужно обойти при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах исполняемый файл и использовать первый найденный.
  • LANG — Настройки языка.
  • TERM — Текущий терминал.
  • MAIL — Местоположение, где хранится почта текущего пользователя.

Команды printenv и env выводят только переменные окружения. Если вы хотите получить список всех переменных, включая окружение, оболочку и переменные, а также функции оболочки, вы можете использовать команду set без аргументов:

Команда отобразит большой список всех переменных, поэтому правильнее будет направить вывод в команду less.

Конечно, можно использовать echo для вывода переменной оболочки. Например, чтобы вывести значение переменной BASH_VERSION выполните:

Установка переменных среды

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

Создадим новую переменную оболочки с именем MY_VAR и значением Abuzov, для этого введём:

Вы можете проверить, что переменная установлена, используя echo $MY_VAR. Для фильтрации вывода команды set с помощью grep set | grep MY_VAR:

Используйте команду printenv, чтобы проверить, является ли эта переменная переменной среды:

Вывод окажется пустым — это говорит о том, что переменная не является переменной окружения. Также можно напечатать переменную в под-оболочке, и вы получите пустой вывод.

Команда export используется для установки переменных окружения. Чтобы создать переменную, просто экспортируйте переменную оболочки как переменную среды:

Теперь выполнение команды printenv MY_VAR выведет на экран значение Abuzov. Дополнительно, можно устанавливать переменные среды командой в одну строку:

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

Постоянные переменные среды

Для создания постоянных переменных окружения, нужно определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:

  • /etc/environment — Используйте этот файл для настройки общих системных переменных. Переменные в этом файле устанавливаются в следующем формате
  • /etc/profile — Переменные, заданные в этом файле, загружаются при каждом входе в оболочку bash. Чтобы объявить переменные окружения в этом файле вам нужно использовать команду экспорта:
  • Конфигурационные файлы для отдельных пользовательских оболочек. Например, если вы используете Bash, вы можете объявить переменные в

Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source:

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

Источник

Переменные окружения в Linux

Переменные окружения в Linux — это специальные переменные, определенные оболочкой и используемые программами во время выполнения. Они могут определяться системой и пользователем. Системные переменные окружения Linux определяются системой и используются программами системного уровня.

Например, команда PWD использует системную переменную, чтобы сохранять прежнюю рабочую директорию. Пользовательские переменные окружения устанавливаются пользователем, для текущей оболочки, временно или постоянно. Вся концепция добавления и удаления переменных оболочки крутится вокруг нескольких файлов, команд и различных оболочек.

Если смотреть более широко, переменная окружения может быть трех типов:

1. Локальные переменные окружения

Эти переменные определены только для текущей сессии. Они будут безвозвратно стерты после завершения сессии, будь то удаленный доступ или эмулятор терминала. Они не хранятся ни в каких файлах, а создаются и удаляются с помощью специальных команд.

2. Пользовательские переменные оболочки

Эти переменные оболочки в Linux определяются для конкретного пользователя и загружаются каждый раз когда он входит в систему при помощи локального терминала, или же подключается удаленно. Такие переменные, как правило, хранятся в файлах конфигурации: .bashrc, .bash_profile, .bash_login, .profile или в других файлах, размещенных в директории пользователя.

3. Системные переменные окружения

Эти переменные доступны во всей системе, для всех пользователей. Они загружаются при старте системы из системных файлов конфигурации: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Конфигурационные файлы переменных окружения Linux

Здесь мы кратко рассмотрим различные конфигурационные файлы, перечисленные выше, которые используются для настройки переменных окружения для всей системы или конкретного пользователя.

.bashrc

Это файл переменных конкретного пользователя. Загружается каждый раз, когда пользователь создает терминальный сеанс, то есть проще говоря, открывает новый терминал. Все переменные окружения, созданные в этом файле вступают в силу каждый раз когда началась новая терминальная сессия.

.bash_profile

Эти переменные вступают в силу каждый раз когда пользователь подключается удаленно по SSH. Если этот файл отсутствует система будет искать .bash_login или .profile.

/etc/environment

Этот файл для создания, редактирования и удаления каких-либо переменных окружения на системном уровне. Переменные окружения, созданные в этом файле доступны для всей системы, для каждого пользователя и даже при удаленном подключении.

/etc/bash.bashrc

Системный bashrc. Этот файл выполняется для каждого пользователя, каждый раз когда он создает новую терминальную сессию. Это работает только для локальных пользователей, при подключении через интернет, такие переменные не будут видны.

/etc/profile

Системный файл profile. Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал.

Все переменные окружения Linux созданные с помощью этих файлов, могут быть удаленны всего лишь удалением их оттуда. Только после каждого изменения, нужно либо выйти и зайти в систему, либо выполнить эту команду:

Добавление пользовательских и системных переменных окружения в Linux

Теперь, когда вы знаете немного теории, перейдем к практике. Локальные переменные окружения в Linux можно создавать следующими командами:

var=значение
$ export var=значение

Эти переменные будут доступны только для текущей терминальной сессии.

Для удаления переменных окружения можно использовать несколько команд:

1. Использование env

По умолчанию с помощью env можно посмотреть все установленные переменные среды. Но с опцией -i она позволяет временно удалить все переменные оболочки и выполнить команду без переменных.

env –i [Var=Значение] команда

Var — это любая переменная, которую вы хотите передать этой команде.

Такая команда запустит оболочку вообще без переменных окружения:

После запуска такого окружения, не будет доступно никаких переменных, но после выхода все вернется на свои места.

2. Использование unset

Это другой способ удаления переменных окружения Linux. Unset удаляет переменную по имени до конца текущей сессии:

3. Установить значение переменной в »

Это самый простой способ удаления переменных окружения в Linux, устанавливая пустое значение переменной, вы удаляете ее до конца текущей сессии.

Замечание: С помощью таких способов вы можете изменять значения системных или пользовательских переменных, но они будут актуальны только для текущего сеанса.

Создание пользовательских и системных переменных окружения

В этом разделе рассмотрим как установить и удалить системные и пользовательские переменные не только для текущего сеанса, а так чтобы эффект сохранялся после перезагрузки.

1. Устанавливаем и удаляем локальные переменные в Linux

Давайте создадим локальную переменную VAR и установим ей любое значение, затем удалим ее с помощью unset и убедимся что она удалена:

VAR1=’Losst’
$ echo $VAR1
$ unset VAR1
$ echo $VAR1

Другой способ создать переменную — команда export. Удалим ее присвоив пустое значение:

export VAR=’Losst’
$ echo $VAR
$ VAR=
$ echo $VAR

Теперь создадим переменную VAR2 также зададим ей значение. А потом временно удалим все локальные переменные выполнив env -i. Она запустит оболочку без каких-либо переменных. После ввода exit все переменные будут восстановлены.

VAR2=’Losst’
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Установка и удаление пользовательских переменных

Отредактируйте файл .bashrc, в вашей домашней директории, добавив команду export, для экспортирования нужной переменной. Затем выполните команду source для применения изменений. Создадим, например, переменную CD:

Добавьте такую строчку (o, затем вставить, затем Esc и :wq):

export CD=’This is Losst Home’

Теперь осталось обновить конфигурацию:

source .bashrc
$ echo $CD

Для удаления этой переменной просто удалите ее из .bashrc.

Теперь добавим переменную окружения с помощью .bash_profile. Эта переменная, как вы уже знаете будет доступна только при удаленном входе:

export VAR2=’This is Losst Home’

И выполните эти команды, чтобы применить изменения и проверить добавление переменной:

source .bash_profile
$ echo $VAR2

Переменная недоступна, так как вы создали локальную терминальную сессию, теперь подключитесь по ssh:

ssh user@localhost
$ echo $VAR2

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

Замечание: Эти переменные доступны всегда, но не для всех пользователей.

Установка и удаление системных переменных окружения

Создадим переменную, доступную для всех пользователей, во всех терминальных сессиях, кроме удаленных, добавлением ее в /etc/bash.profile:

export VAR=’This is system-wide variable’

Теперь эта переменная доступна для всех пользователей, во всех терминалах:

echo $VAR
$ sudo su
$ echo $VAR
$ su —
$ echo $VAR

Если вы хотите сделать переменную окружения доступной для всех пользователей, которые подключаются к этой машине удаленно, отредактируйте файл /etc/profile:

export VAR1=’This is system-wide variable for only remote sessions’

Обновите конфигурацию, и проверьте доступность переменной, она будет доступна только удаленно:

source /etc/profile
$ echo $VAR1

Если нужно добавить переменную окружения в Linux, так чтобы она была доступна и удаленно, и для локальных сессий, экспортируйте ее в /etc/environment:

export VAR12=’I am available everywhere’

source /etc/environment
$ echo $VAR12
$ sudo su
$ echo $VAR12
$ exit
$ ssh localhost
$ echo $VAR12

Как видите, переменная доступна и для локальных пользователей и удаленно.

Выводы

С помощью этих нескольких способов мы можем изменить переменные окружения. Если вы знаете другие интересные способы это сделать, поделитесь в комментариях!

Оцените статью:

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.

8 комментариев

/etc/profile
«Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. »
А что значит вошел удаленно? Через SSH?

Написанное справедливо для всех современных дистрибутивов?

Здравствуйте! Скажите можно ли запускать видео на 2-м мониторе добавив переменную в ./bashrc к примеру:
env DISPLAY=0:1 totem (ну или другой проигрыватель)?
или лучше использовать:
export DISPLAY=0:1 totem

Думаю: лучше env -i DISPLAY=0:1 totem в

/.xinputrc, только вот с totem’ом могут быть те ещё грабли — тут уже не подскажу. а вот если там же, в

/.xinputrc, будет export DISPLAY=0:1, то это подействует и на X-сервер. Ну, и ваше export DISPLAY=0:1 totem — это уже ошибка, тогда уж в две строки:
export DISPLAY=0:1
totem
Но, totem будет запускаться вместе с x-сервером. может проще создать alias с env в

/.bashrc? А может в totem есть ещё какие опции, как, например, в mplayer -display?

«. добавлением ее в /etc/bash.profile
.
Затем обновляем:
source /etc/bash.bashrc»
я думал обновлять надо отредактированный файл, или это опечатка?

Позволю себе добавить к вышесказанному:
VAR=1 # переменная видна только для ТЕКУЩЕГО процесса
$VAR
>> 1: команда не найдена
set | grep VAR # set без параметров отобразит ВСЕ (как локальные так и глобальные) переменные
>> VAR=1
env | grep VAR
>>
bash # запустим дочерний процесс
$VAR # наша переменная в нем не видна
>>
exit # выходим
$VAR # переменная сохранилась в родительском процессе
>> 1: команда не найдена
VAR=2 bash # установим переменную для дочернего процесса
$VAR # она видна в дочернем процессе
>> 2: команда не найдена
set | grep VAR # так же видна в set
>> VAR=2
exit # закрываем дочерний процесс
$VAR # в родительском процессе хранится свой экземпляр переменной
>> 1: команда не найдена
unset VAR
$VAR
>> # значение переменной сброшено

export VAR=3 # переменная видна в ТЕКУЩЕМ и ДОЧЕРНИХ процессах
$VAR
>> 3: команда не найдена
set | grep VAR
>> VAR=3
env | grep VAR
>> VAR=3
printenv | grep VAR
>> VAR=3
bash # запускаем дочерний процесс
env | grep VAR
$VAR # переменная доступна
>> 3: команда не найдена
VAR=2 # можем изменить ее значение
$VAR
>> 2: команда не найдена
unset VAR # сбросим значение
$VAR
>> # переменная не определена
exit
$VAR
>> 3: команда не найдена # родительский процесс хранит значение переменной после сброса в дочернем
env | grep VAR
>> VAR=3

«Системный файл profile. Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал.» – неверно. Переменная будет доступна везде: в терминале, GUI программах, не важно. Только что проверял локально.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Как откатить mac os high sierra до sierra
  • Как освободить место на диске mac os
  • Как определить версию mac os
  • Как объединить два диска в один mac os
  • Как обрезать видео на mac os