Зачем нужны переменные окружения?
Если коротко, то они необходимы для организации различного рода окружений: системных, пользовательских, сеансовых, т. е. для хранения настроек соответствующих сред внутри системы. К примеру, программы для своей работы используют библиотечные функции, являющиеся одним из важнейших системных ресурсов. Или, например, интерпретатор команд способен находить соответствующие командам исполняемые файлы без необходимости каждый раз указывать соответствующие пути.
Но как программы «узнают», где можно найти те или иные ресурсы? Из переменных окружения. Таким же образом происходит запуск и исполнение команд в командной консоли, т. к. благодаря переменной окружения PATH интерпретатор bash (или любая другая командная оболочка) находит программу (исполняемый файл или библиотеку) по указанному в PATH пути. И таким же образом, к примеру, команда man «знает», что запрашиваемые страницы справочных руководств нужно искать согласно значению переменной окружения MANPATH.
Шаги по редактированию переменной среды пути в Windows 10
Окно «Изменить переменную среды» позволяет добавлять новые пути к стороннему программному обеспечению, чтобы можно было открывать программы, не вводя их полные каталоги в командной строке.
Вот как вы можете редактировать переменную окружения пути Windows в Windows 10:
В поле поиска Windows введите «дополнительные параметры системы». Затем выберите Просмотр дополнительных настроек системы , чтобы открыть окно на снимке ниже.
Нажмите кнопку Переменные среды , чтобы открыть окно, показанное ниже.
Там вы можете выбрать путь в поле Системные переменные . Если выбрать «Путь» и нажать кнопку Изменить , откроется окно, показанное ниже.
Приведенное выше окно «Изменить переменную среды» содержит путь C: \ Windows \ system32, в котором находится инструмент проверки системных файлов. Чтобы добавить собственный путь, нажмите кнопку Новый .
- Введите strong C: ‘в пустом месте и нажмите кнопку Обзор , чтобы выбрать папку. Если вы не введете что-либо в пространство для нового пути, выбранный вами каталог папки заменит указанный выше путь.
- Теперь выберите папку со сторонним программным обеспечением в окне «Обзор папок». Например, мы выбрали папку, которая включает в себя Firefox.
- Нажмите кнопку ОК в окне просмотра папок, чтобы подтвердить выбор. Окно редактирования переменной среды будет включать выбранный вами путь, как показано на снимке ниже.
- Нажмите кнопку ОК в окне Изменить переменную среды, чтобы закрыть его.
- Нажмите кнопки ОК в окнах «Переменные среды» и «Свойства системы», чтобы закрыть их.
- Теперь введите cmd в поле поиска Windows.
- Нажмите Командная строка в этом меню, чтобы открыть его, как показано ниже.
Теперь вы можете открыть путь к программному обеспечению, который вы добавили в окно редактирования переменной среды, введя его исполняемый файл. Например, если вы добавили к нему путь Firefox, вы можете открыть этот браузер, введя «Firefox» в командной строке.
Обратите внимание, что исполняемый файл программы не всегда соответствует точному названию программного обеспечения. Например, мы обнаружили, что исполняемым файлом Opera был Launcher
Таким образом, проверьте заголовок исполняемого файла программного обеспечения в проводнике, а затем введите его в командной строке.
Вам больше не нужно вводить название программы C: \ folder \ sub-folder \ sub-folder, чтобы открыть программу. Это, безусловно, пригодится, если вы не совсем уверены, каков путь программного обеспечения.
Это довольно простой процесс, и после выполнения описанных выше шагов установка, редактирование или изменение переменной среды пути в Windows 10 должны быть более или менее формальными.
Если у вас есть другие вопросы о процессе, не стесняйтесь оставлять их в разделе комментариев ниже.
Как установить переменную PATH
Переменные PATH можно указывать как с помощью методов графического интерфейса, так и с помощью интерфейса командной строки, и соответствующие шаги в основном одинаковы для всех версий Windows. Ниже приводится разбивка этих шагов, которые помогут вам в этом процессе.
Установка переменной PATH с помощью графического интерфейса пользователя
Использование графического интерфейса — самый простой способ установить переменную PATH в Windows. Для этого сначала откройте Запуск Windows подскажите, нажав на Windows + R сочетание клавиш.
Далее в поле рядом Открытым, введите sysdm.cpl и нажмите Входить или щелкните Ok открыть Свойства системы.
В Свойства системы, перейдите в Передовой вкладку и нажмите на Переменные среды кнопку внизу.
На Переменные среды в окне вы увидите два раздела: один для пользовательские переменные а другой для системные переменные.
Системные переменные доступны всем пользователям системы, тогда как пользовательские переменные относятся только к текущему пользователю. Поэтому, в зависимости от того, какой тип переменной вы хотите изменить, вам нужно кликнуть «Путь» в соответствующем разделе.
Теперь откройте Проводник и перейдите в каталог установки программы, которую вы хотите добавить в PATH. Нажмите и удерживайте Сдвиг, кликните папку правой кнопкой мыши и выберите Копировать как путь.
в Переменные среды окно, нажмите на Дорожка имя переменной из любого раздела и нажмите Редактировать кнопка. В Windows 7 и Windows 8 добавьте точку с запятой в конце строки и, не оставляя пробела, вставьте путь к программе, которую вы только что скопировали, в Дорожка поле.
Если вы используете Windows 10, нажмите Новый и вставьте скопированный путь в новую строку. Или нажмите Редактировать текст, добавьте точку с запятой в конец поля для Значение переменной, и вставьте путь к программе.
Ударять Ok.
Установка переменной PATH с помощью интерфейса командной строки
Хотя за методом графического интерфейса проще следовать и он устанавливает переменную PATH постоянно, он включает в себя несколько шагов. Поэтому, если вы хотите избавить себя от необходимости щелкать по различным окнам меню, вы можете установить PATH через командную строку, используя ДОРОЖКА команда.
Для этого сначала запустите командную строку с правами администратора. Для этого нажмите Windows + X горячая клавиша, чтобы открыть Меню опытного пользователя и выберите Командная строка (администратор) из доступных вариантов.
Ударять да в Контроль учетных записей пользователей. Если вы используете Windows 7 или Windows 8, нажмите Окна ключ, поиск Командная строка, и нажмите Ctrl + Shift + Enter ярлык, чтобы открыть его с правами администратора.
В командном окне введите свою команду, используя следующий синтаксис команды, чтобы установить переменную:
…куда ценить — это путь к программе в файловой системе, которую вы хотите добавить.
Например:
Однако эта команда временно устанавливает PATH (только для текущего сеанса) и сбрасывает его до значений PATH по умолчанию при перезагрузке системы.
Итак, если вы хотите установить PATH для программы на постоянной основе, чтобы она сохранялась даже после перезагрузки ПК, вам необходимо использовать Setx команда.
Ниже приводится синтаксис для его использования:
Например:
Обратите внимание, что это установит переменную PATH для локальной среды (текущего пользователя). Если вы хотите сделать это в масштабах всей системы, вам нужно использовать / м параметр
Для этого в командной строке с повышенными привилегиями выполните следующую команду:
После этого перезапустите CMD.
Наконец, чтобы убедиться, что ваш PATH был успешно добавлен, выполните следующую команду в CMD:
Также на ТехПП
Зачем редактировать переменные
Изменение переменных среды может помочь, если вы хотите перенести папку «Temp» или «AppData» в другое место. Редактирование %PATH% даст возможность запускать программы из «Командной строки», не указывая каждый раз длинный путь к файлу. Давайте рассмотрим методы, которые помогут в достижении этих целей.
Способ 1: Свойства «Компьютера»
В качестве примера программы, которую необходимо запустить, используем Skype. Попытавшись активировать это приложение из «Командной строки», вы получите такую ошибку:
Это происходит потому, что вы не задали полный путь к исполняемому файлу. В нашем случае полный путь выглядит вот так:
“C:\Program Files (x86)\Skype\Phone\Skype.exe”
Чтобы это не повторять каждый раз, давайте добавим директорию Скайпа в переменную %PATH%.
- В меню «Пуск» нажмите правой кнопкой мыши на «Компьютер» и выберите «Свойства».
Затем перейдите на «Дополнительные параметры системы».
На вкладке «Дополнительно» нажмите на «Переменные среды».
Откроется окно с различными переменными. Выберите «Path» и нажмите «Изменить».
Теперь необходимо дописать путь к нашей директории.
C:\Program Files (x86)\Skype\Phone
Если есть необходимость, таким же образом вносим изменения в другие переменные и жмем «ОК».
Завершаем сеанс пользователя, чтобы изменения сохранились в системе. Снова заходим в «Командную строку» и пытаемся запустить Скайп, введя
Готово! Теперь вы можете запускать любую программу, а не только Skype, находясь в любой директории в «Командной строке».
Способ 2: «Командная строка»
Рассмотрим случай, когда мы хотим установить %APPDATA% на диск «D». Эта переменная отсутствует в «Переменных среды», поэтому ее невозможно изменить первым способом.
- Чтобы узнать текущее значение переменной, в «Командной строке» введите:
В нашем случае эта папка находится по адресу:
Для того чтобы изменить ее значение, введите:
Значение успешно изменено.
Изменение значений переменных среды требует определенных знаний в этой сфере. Не играйтесь со значениями и не редактируйте их наугад, чтобы не навредить ОС. Хорошо изучите теоретический материал, и только после этого переходите к практике.
Командная строка
Командная строка Bash работает под управлением библиотеки Readline. Readline позволяет использовать комбинации клавиш в стиле emacs и vi для взаимодействия с командной строкой, например, для перемещения назад и вперёд целыми словами, удаления слов и т.д. Кроме того, Readline отвечает за хранение выполненных команд, а также позволяет создавать .
Автодополнение
Автодополнение (tab completion) — завершение вводимых команд по нажатию клавиши (работает по умолчанию).
Одиночное нажатие
Вывести список возможных завершений для частично введённой команды можно несколькими повторными нажатиями клавиши — иногда двумя или тремя. В статье описано, как уменьшить количество нажатий до одного.
Настройки для команд
Примечание: Встроенная команда Bash может конфликтовать с .
По умолчанию Bash помогает завершать только имена файлов, которые следуют за командой. Это можно перенастроить командой , чтобы дополнялись и определённые команды:
~/.bashrc
complete -c man which
С флагами завершаться будут и команды, и имена файлов после них:
complete -cf sudo
Другие опции автодополнения можно найти в руководстве Bash.
История команд
Автодополнение истории
~/.bashrc
bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward'
Или же, чтобы это работало во всех программах Readline:
~/.inputrc
"\e[A": history-search-backward "\e[B": history-search-forward
Сокращение истории
Переменная позволяет предотвратить логирование некоторых команд. Например, чтобы одинаковые команды не попадали в историю, присвойте переменной следующее значение:
~/.bashrc
export HISTCONTROL=ignoredups
Если же задать значение , то дополнительно из истории будут удалены уже существующие дубликаты команд. Подробнее см. руководство Bash.
Отключение истории
Чтобы временно отключить историю, выполните:
$ set +o history
После этого вводимые команды не будут сохраняться в .
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля () или работы с GPG (), не опасаясь, что секретный ключ будет сохранён на диск.
Включить историю обратно можно командой
$ set -o history
Совет: Если переменная имеет значение , команды, начинающиеся с пробела, не будут сохраняться в файл истории. Подробнее см. .
Чтобы отключить всю историю Bash:
~/.bashrc или /etc/profile
export HISTSIZE=0
После необходимо удалить старый файл истории (имейте в виду — команды ниже удалят его безвозвратно):
$ wipe -i -l2 -x4 -p4 "$HISTFILE" $ ln -sv /dev/null "$HISTFILE"
run-help из Zsh
В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш . В Bash то же самое можно сделать с помощью привязки комбинации клавиш в Readline:
~/.bashrc
run-help() { help "$READLINE_LINE" 2>/dev/null || man "$READLINE_LINE"; } bind -m vi-insert -x '"\eh": run-help' bind -m emacs -x '"\eh": run-help'
Предполагается, что вы используете (стандартный) .
Виды переменных окружения
Как уже отмечалось, в системе существуют, образно выражаясь, различные рабочие среды для разных уровней доступа и продолжительности действия переменных. Для организации работы пользователей действует пользовательская среда (окружение), для корректного функционирования компонентов системы — системное окружение, доступное только суперпользователю. В процессе работы также можно устанавливать временные переменные окружения, доступные текущему пользователю и только на время действия текущего сеанса.
Ниже приведены некоторые наиболее часто используемые переменные окружения:
Имя | Описание |
HOME | Определяет путь к домашнему каталогу текущего пользователя |
PWD | Определяет текущий активный каталог |
OLDPWD | Предыдущий активный каталог |
SHELL | Определяет программу-командную оболочку |
TERM | Содержит имя текущей запущенной программы-терминала |
PAGER | Определяет программу для постраничного вывода страниц справочных руководств |
EDITOR | Определяет программу для редактирования текстовых файлов |
VISUAL | Определяет программу для редактирования текстовых файлов с расширенными возможностями (vim, emacs) |
Определяет путь к каталогу, в котором должны храниться файлы входящей электронной почты. | |
BROWSER | Определяет веб-браузер, запускаемый по-умолчанию |
ftp_proxy
http_proxy |
Определяют, соответственно адреса для прокси-серверов по FTP и HTTP протоколам |
MANPATH | Определяет каталог, в котором содержатся подкаталоги, содержащие man-страницы справочных руководств системной справки для команды man |
INFODIR | Определяет список каталогов для поиска info-страниц для команды info |
TZ | Определяет временную зону. Доступные временные зоны хранятся в /usr/share/zoneinfo |
Системные переменные
Согласно стандартам Linux переменные окружения для организации системной среды хранятся в нескольких файлах:
- /etc/bash.bashrc – хранение переменных для командных оболочек;
- /etc/profile – хранение переменных для интерактивных оболочек;
- /etc/environment – переменные из этого файла используются модулем
Конечно, подобное разделение для хранения переменных окружения сделано разработчиками не просто так и эти стандарты необходимо соблюдать, чтобы не замусорить систему бесполезной конфигурацией, вносящей путаницу, т. е. нужно внимательно выбирать нужный файл в зависимости от конкретной задачи и ситуации.
Пользовательские переменные
Для систем, ориентированных на многопользовательский доступ, например на хостинговых площадках, конкретному пользователю полезно иметь возможность гибко настраивать своё собственное рабочее окружение, создавая новые переменные или дополняя их новыми значениями. К примеру, владельцу сайта, для его виртуального хоста, обслуживающего сайт на CMS Drupal, захотелось установить утилиту drush, которая облегчает и ускоряет обслуживание CMS. В этом случае достаточно после локальной установки (в каком-нибудь подкаталоге домашнего каталога) drush, дополнить переменную PATH значением, содержащим путь к утилите drush в файле ~/.bashrc. В результате командная оболочка сможет запускать команду drush для данного пользователя.
По стандартам соглашений для Linux-систем конфигурация для пользовательского окружения должна храниться в следующих файлах:
- ~/.bashrc – для хранения параметров инициализации выбранной командной оболочки для пользователя;
- ~/.profile – для инициализации доступных пользователю командных оболочек;
- ~/.pam_environment – для использования модулем
Временные или переменные сеанса
Переменные окружения также можно устанавливать временно. Это значит, что переменная будет действовать только во время действия текущего сеанса пользователя. В таких случаях удобно иметь определённый скрипт, содержащий код с необходимыми переменными, который можно в любое время запускать командой:
$ source файл_скрипта
Или же устанавливать их вручную командой export.
Установка переменных окружения
Команда export используется для задания переменных окружения. С помощью данной команды мы экспортируем указанную переменную, в результате чего она будет видна во всех вновь запускаемых дочерних командных оболочках. Переменные такого типа принято называть внешними.
Для создания переменной окружения экспортируем нашу недавно созданную переменную оболочки:
Проверяем результат, действительно ли мы создали переменную окружения:
На этот раз, если вы попытаетесь отобразить переменную в новой оболочке, получите её значение:
Результат:
Вы также можете использовать и следующую конструкцию для создания переменной окружения:
Примечание: Созданные подобным образом переменные окружения доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, то все переменные будут потеряны.
Получение информации о переменных окружения
В работе, тесно связанной с системным администрированием довольно часто приходится сталкиваться с такими ситуациями, когда необходимо узнать значения некоторых переменных окружения или же вывести список полный список таковых. Для этой цели существует несколько специализированных утилит. В подавляющем большинстве случаев соответствующие пакеты уже предустановлены в системе. Самыми распространёнными из таких утилит являются printenv, env, а также export. Так, например, для того, чтобы вывести список действующих переменных окружения нужно дать следующую команду:
$ printenv GS_LIB=/home/john/.fonts KDE_FULL_SESSION=true LANG=ru_RU.UTF-8 DISPLAY=:0 OLDPWD=/home/john/builds/wxwidgets PWD=/home/john HOME=/home/john . . . SHELL=/bin/bash PATH=/opt/wxwidgets/bin:/home/john/.config/composer/vendor/bin:/usr/bin
В данном выводе представлен сильно сокращённый список переменных окружения для Kubuntu 18.04. Также следует заметить, что представленный список относится к пользовательскому набору, доступному текущему пользователю. Если выполнить команду printenv от имени суперпользователя (root), то набор переменных будет несколько отличаться.
Как следует из вышеприведённого вывода, для пользователя john используется русская локализация для сеанса (LANG), в качестве командного интерпретатора по-умолчанию используется bash (SHELL), текущим активным каталогом является /home/john (PWD), а переменная PATH модифицирована и содержит в себе (кроме дефолтного /usr/bin) значения /opt/wxwidgets/bin и /home/john/.config/composer/vendor/bin. Значение каждой переменной окружения представляет собой, как можно видеть, набор параметров, разделённых двоеточиями.
Тот же список можно вывести, если дать команду env. Также можно использовать команду export с ключом -p:
$ export -p
Для вывода значения конкретной переменной:
$ echo $PATH
или:
$ printenv | grep PATH
В последнем случае будет выведены все переменные, содержащие фразу «PATH».
Что такое переменные среды?
Переменные среды содержат значения, связанные с текущей средой, такой как операционная система или пользовательские сеансы.
Дорожка
Один из самых известных называется в Windows, Linux и Mac OS X. Он определяет каталоги, в которых исполняемые программы * находятся на компьютере, которые можно запускать, не зная и не вводя полный путь к файлу в команде. линия. (Или в Windows, диалоговое окно Run в меню Пуск или +R).
В Linux и Mac OS X он обычно содержит все каталоги и , относящиеся к текущему пользователю. В Windows он содержит как минимум каталоги и — поэтому вы можете выполнить или из командной строки или Run , но не . (Firefox находится в . Чтобы узнать, как включить Firefox, перейдите здесь .)
Например, при вводе (код можно опускать) в командной строке в Windows запустится калькулятор Windows.
* Вы можете добавить поддержку расширений файлов, отличных от , отредактировав .
Другой
Другие переменные могут сообщать программам, какой тип терминала используется ( в Linux/Mac OS X) или в Windows, где находится папка Windows (например, равен ).
Создание новых переменных среды
В Windows, Linux и Unix можно создавать новые переменные среды, значения которых затем становятся доступными для всех программ при запуске.
Это можно использовать при написании сценариев или программ, которые установлены или развернуты на нескольких компьютерах и которым необходимо ссылаться на значения, характерные для этих компьютеров. Хотя подобный эффект может быть достигнут с помощью параметров конфигурации, специфичных для программы, это проще сделать с помощью переменной среды, если нескольким программам необходим доступ к одному значению.
Обязательные Mandatory аргументы
Работая с другими командами Powershell вы замечали, что какие-то параметры являются обязательными к заполнению, а какие-то нет. По умолчанию все параметры опциональны. Что бы сделать их обязательными к заполнению используется аргумент ‘Mandatory’. Обязательность использования параметра указывается в ‘Parameter()’:
Если вы не используете параметр явно, то он у вас будет запрошен. Это правило, в случае выше, касается только одного параметра так как он является обязательным.
Обратите внимание, что объявление ‘Mandatory’ не снимает с вас обязанности проверки на корректность переданных данных. Это дает лишь возможность остановить работу функции еще на первоначальном этапе
5 ответов
30
Файл считывается bash, когда он является оболочкой входа. Это то, что вы получаете при входе в текстовый режим.
Когда вы входите в систему под X, сценарии запуска выполняются с помощью . На Ubuntu и Mint, есть тире , а не bash. У Dash и bash есть те же основные функции, но штрих к этим основным функциям, чтобы быть быстрыми и маленькими, в то время как bash добавляет множество функций за счет потребности в большем количестве ресурсов. Обычно используется тире для скриптов, которым не нужны дополнительные функции и bash для интерактивного использования (хотя zsh ).
Большинство комбинаций диспетчера дисплеев (программа, в которой вы вводите имя пользователя и пароль) и среда рабочего стола читаете из сценариев входа в систему в , , или в зависимости от того, что применимо. Поэтому поставьте определения переменных среды в . Обязательно используйте только синтаксис, поддерживающий тире.
Итак, что вы должны положить где?
-
Хороший загружает , и загружает , если оболочка является интерактивной.
-
В , укажите определения переменных среды и другие параметры сеанса, такие как
- В , установите интерактивные настройки bash, такие как псевдонимы, функции, завершение, привязки клавиш (которые не находятся в ), …
См. также и .
14
— это сценарий конфигурации запуска bash. Не существует стандартного мандата X на источник .
То, о чем вы думаете, скорее . Первоначально это был файл конфигурации запуска bourne shell (sh). Сегодня во многих дистрибутивах есть среда рабочего стола, настроенная на источник
Обратите внимание, что это также не стандарт, но, похоже, это соглашение
Debian используется для источника при графическом входе ( вики-страница с 2013 года ) теперь это не ( wiki-страница с 2016 г. ).
Источники арки при графическом входе в систему ( вики-страница с 2013 года ).
Ubuntu используется для предотвращения использования ( wiki-страница с 2013 года ) теперь она больше не препятствует ( wiki-страница с 2016 года ).
Относительно вашего другого вопроса: Почему мой файл ~ /.bash_profile не работает? Это ожидаемое поведение.
Поведение, короче говоря, выглядит следующим образом:
- bash запускается как интерактивная оболочка входа: читает
- bash запущен как интерактивная оболочка без входа: читает
Подробнее см. мой ответ на аналогичный вопрос в askubuntu:
1
В своем вопросе вы ссылаетесь на https://stackoverflow.com/questions/902946/, рекомендуя не использовать источник , когда принятый ответ предписывает
Включение всего этого в не работает для меня в Linux Mint. Использование отлично работает.
1
При попытке перезагрузить /исходный файл ~ /.profile возникает пара проблем.
[Это относится к Ubuntu linux — в некоторых случаях детали команд будут разными)
- Запускаете ли вы это непосредственно в терминале или в скрипте?
- Как вы запускаете это в скрипте?
Ad. 1)
Выполнение этого непосредственно в терминале означает, что не будет создана подселлем. Таким образом, вы можете использовать две команды:
или
В обоих случаях это обновит среду с содержимым файла .profile.
Объявление 2) Вы можете запустить любой скрипт bash либо путем вызова
или
В первом случае это создаст подоболочку, которая не повлияет на переменные среды вашей системы, и они будут видны только для процесса подоболочки. После завершения команды subshell ни один экспорт и т. Д. Не будет применяться.
ЭТО ОБЩАЯ ОШИБКА И ПРИЧИНЫ МНОГО РАЗРАБОТЧИКОВ, ЧТОБЫ ПОТЕРЯТЬ МНОГО ВРЕМЕНИ.
Чтобы ваши изменения, примененные в вашем скрипте, имели эффект для глобальной среды, сценарий должен запускаться с
команды.
Чтобы убедиться, что сценарий не запущен на подошве, вы можете использовать эту функцию. (Снова пример для оболочки Ubuntu)
Я надеюсь, что это очистит некоторые из распространенных недоразумений! : D
Удачи!
Простое решение — сделать терминал терминалом входа. Для терминала Gnome в разделе «Плитка и команда» профиля по умолчанию вы можете установить флажок «Запустить команду в качестве оболочки входа». Эта статья объясняет разницу между оболочку входа, а другая — нет.
Разделение параметров на группы с ParameterSetName
В ситуациях, когда в функцию нужно передать разный набор обязательных параметров, мы можем использовать атрибут ParameterSetName. Для примера можно посмотреть на описание синтаксиса команды ‘Get-EventLog’:
У нас выводится 2 возможных варианта использования команды. Для каждого из варианта использования команды могут быть определены свои индивидуальные ключи. Именно для этого используется ParameterSetName.
Создадим команду с 2-умя группами. Первая группа ‘Group1’ работает с именами пользователей, а ‘Group2’ только с идентификаторами и требует дополнительно параметра:
На скриншоте видно, что если мы введем ‘ID’, то появится диалог с вводом ‘Message’. Вы так же можете попробовать использовать кнопку ‘tab’ после выбора одной из групп — параметры из другой группы перестанут предлагаться.
Если вы попробуете запустить команду без указания каких либо групп — получите ошибку:
- Не удается разрешить набор параметров с использованием указанных именованных параметров.
- parameter set cannot be resolved using the specified named parameters
Группу, которую вы планируете использовать по умолчанию, можно определить в ‘CmdletBinding’ используя атрибут ‘DefaultParameterSetName’:
Один ключ может находится в нескольких группах. Для этого, группу, нужно указать в разных ‘Parameter()’. Каждый аргумент, указанный в Parameter, будет действовать для определенной группы. Так, в случае ниже, в одной группе «$Message» является обязательным, а в другой опциональным параметром:
Определение выбранной группы с $PSCmdlet
После вызова команды создается переменная $PSCmdlet. В этой переменной хранятся разные свойства команды. Одно из таких свойств ‘ParameterSetName’, который показывает выбранную группу. Это может понадобиться что бы более удобно расписать логику:
Если какой-то параметр не будет принадлежать к конкретной группе — его можно будет использовать в любых комбинациях.
Системные $_ и $PSItem и конвейер
Когда мы работаем с существующими командами Powershell бывает необходимо передать определенное значение в параметр. На примере ниже у нас есть список сервисов статус которых мы хотим получить:
На самом деле команда сама подставляет нужные переменные под нужные параметры, которые в целом выглядят так:
Если вы читали статью про функции Powershell, то знаете, что существуют параметры принимающие значения из конвейера и которые этого делать не могут. Что бы увидеть какие параметры принимают данные из конвейера используйте Get-Help:
При создании командлетов указывается какие параметры будут принимать значения из конвейера, какие только по имени (свойству) и каким достаточно только значения. Если нам нужно подставить наши значения в определенный параметр в конвейере используется специальная переменная «$PSItem» или «$_» . Они так же используются в выражениях (ScriptBlock). Например выполнив следующую команду мы получим ошибку:
- Get-Service : Не удается найти службу с именем службы.
- Get-Service : Cannot find any service with service name.
Этот тип массивов относится к именованным, а это значит что-либо должно совпадать имя/свойство (оно Service вместо Name) либо мы должны передаваться только значение. Первый вариант это корректно переименовать хэш-таблицу:
Пример выше сработает если только именованный массив относится к PSCustomObject. Если бы это был hashtable, то была бы ошибка.
Второй вариант это напрямую передавать значение:
Чаще и удобнее всего значения подставлять так:
Еще один пример использования $PSItem и $_ в выражениях (ScriptBlock). Вам наверняка часто требуется изменить вывод команд. На примере ниже я получаю сервис, который запущен и содержит в имени «WinR»:
Where-Object — самый частый пример использования таких переменных, так как по умолчанию он не позволяет использовать несколько условий.
Локальные переменные среды
Поскольку их имя указывает, что переменные локальной среды могут отображаться только в локальном процессе, в котором они определены. Не смешивайте, хотя и о переменных локальной среды, они одинаково важны как глобальные переменные среды. Фактически, система Linux также по умолчанию будет определять стандартные локальные переменные среды для вас. Это становится сложно, когда вы пытаетесь увидеть список переменных локальной среды. К сожалению, для нас нет команды, которая будет отображать только локальные переменные среды. Существует команда, которая отображает все переменные среды, заданные для определенного процесса. Обратите внимание, что это также включает глобальные переменные окружения
Регистрация сведений о проблеме, отчета об ошибке, запроса на функцию
Функция обработки проблем в репозитории продуктов WSL позволяет:
Выполнять поиск сведений о существующих проблемах, чтобы найти информацию, связанную с возникшей проблемой
Обратите внимание, что в строке поиска можно удалить is:open, чтобы включить в результаты поиска проблемы, которые уже были решены. Рассмотрите возможность комментирования или одобрения любых открытых проблем, чтобы выразить свою заинтересованность в их продвижении в качестве приоритетных.
Регистрировать сведения о новых проблемах
Если вы обнаружили проблему с WSL, о которой нет упоминаний, вы можете нажать зеленую кнопку New issue (Новая проблема), а затем выбрать элемент WSL — Bug Report (WSL — отчет об ошибках). Вам нужно будет включить название проблемы, номер сборки Windows (выполните , чтобы узнать номер текущей сборки), независимо от того, используете ли вы WSL 1 или WSL 2, текущую версию ядра Linux (выполните или ), номер версии дистрибутива (выполните ), а также любые другие версии используемого программного обеспечения, сведения о действиях для воспроизведения, ожидаемом поведении, фактическом поведении, а также журналы диагностики, если они доступны и применимы. Дополнительные сведения см. в разделе, посвященном вкладу в WSL.
Отправить запрос на функцию, нажав зеленую кнопку New issue (Новая проблема) и выбрав Feature request (Запрос на функцию). Вам нужно будет ответить на несколько вопросов, описывающих ваш запрос.
Кроме того, вы можете сделать следующее:
- Зарегистрировать сведения о проблеме с документацией, используя репозиторий документов WSL. Чтобы внести изменения в документацию по WSL, ознакомьтесь с руководством для участников разработки портала «Документация» Майкрософт.
- Зарегистрировать сведения о проблеме с Терминалом Windows, используя репозиторий продуктов Терминала Windows, если проблема связана с Терминалом Windows, консолью Windows или пользовательским интерфейсом командной строки.
Заключение
Переменные окружения и оболочки всегда присутствуют в сеансах оболочки и могут быть очень полезны. Они позволяют родительским процессам устанавливать детали конфигурации для своих дочерних процессов и являются способом установки определенных параметров без использования отдельных файлов.
Это дает много преимуществ в конкретных ситуациях. Например, некоторые механизмы развертывания (деплоймента) полагаются на переменные окружения для настройки информации аутентификации. Переменные окружения и оболочки позволяют хранить эти данные не в файлах, которые могут быть просмотрены посторонними лицами.
Существует множество других распространенных сценариев, в которых вам нужно будет прочитать или изменить параметры/данные вашего окружения или оболочки. Теперь вы знаете как это можно сделать.