Spec-Zone.ru › Fish 3.6

set - отображение и изменение переменных оболочки

Краткое описание

set
set (-f | --function) (-l | local) (-g | --global) (-U | --universal)
set [-Uflg] NAME [VALUE ...]
set [-Uflg] NAME[[INDEX ...]] [VALUE ...]
set (-a | --append) [-flgU] NAME VALUE ...
set (-q | --query) (-e | --erase) [-flgU] [NAME][[INDEX]] ...]
set (-S | --show) [NAME ...]

Описание

set манипулирует переменными оболочки.

Если заданы как NAME, так и VALUE, set присваивает любые значения переменной NAME. Переменные в fish являются списками, допускается несколько значений. Можно указать один или несколько индексов переменной INDEX, включая диапазоны (не для всех вариантов).

Если VALUE не задан, переменная будет установлена в пустой список, т. е. ''.

Если set выполняется без аргументов, она выводит имена и значения всех переменных оболочки в отсортированном порядке. Передача флагов scope или export позволяет отфильтровать это, чтобы отображались только соответствующие переменные, поэтому set --local будет отображать только локальные переменные.

С помощью --erase и, необязательно, флага области set будет удалена соответствующая переменная (или переменная с таким же именем в самой маленькой возможной области).

С помощью --show, set будет описывать заданные имена переменных, объясняя, как они были определены - в какой области с какими значениями и параметрами.

Следующие параметры управляют областью действия переменных:

-U или --universal

Устанавливает универсальную переменную. Переменная будет немедленно доступна всем fish экземплярам пользователя в системе и сохранится после перезапуска оболочки.

-f или --function

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

-l или --local

Устанавливает переменную локальной области действия в данном блоке. Она удаляется по завершении блока. Вне блока это эквивалентно --function.

-g или --global

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

Эти параметры изменяют поведение переменных:

--export или -x

Вызывает экспорт указанной переменной оболочки в дочерние процессы (делая её «переменной среды»).

--unexport или -u

Вызывает отказ от экспорта указанной переменной оболочки в дочерние процессы.

--path

Обращается к указанной переменной как к переменной пути; переменная будет разделена по двоеточиям (:) и будет отображаться, соединённая двоеточиями, при использовании кавычек (echo "$PATH") или экспорте.

--unpath

Приводит к тому, что переменная больше не будет рассматриваться как переменная пути. Примечание: переменные, оканчивающиеся на «PATH», автоматически являются переменными пути.

Дополнительные параметры:

-a или --append NAME VALUE …

Добавляет VALUES к текущему набору значений для переменной NAME. Может использоваться с --prepend для одновременного добавления и вставки в начало. Не может использоваться при присваивании срезу переменной.

-p или --prepend NAME VALUE …

Вставляет VALUES в начало текущего набора значений для переменной NAME. Может использоваться с --append для одновременного добавления и вставки в начало. Не может использоваться при присваивании срезу переменной.

-e или --erase NAME*[*INDEX]

Приводит к удалению указанных переменных оболочки. Поддерживает удаление из нескольких областей одновременно. Можно указать отдельные элементы в переменной по INDEX в скобках.

-q или --query NAME*[*INDEX]

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

-n или --names

Выводит только имена всех определённых переменных, а не их значения. Имена гарантированно отсортированы.

-S или --show

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

-L или --long

При выводе переменных не сокращать длинные значения.

-h или --help

Отображает справку по использованию данной команды.

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

Если имя переменной является одним или несколькими элементами списка, например PATH[1 3 7], будут изменены только указанные элементы списка. При указании отрицательного индекса при расширении или присваивании списковой переменной индекс будет вычислен с конца списка. Например, индекс -1 означает последний индекс списка.

Правила области действия при создании или обновлении переменной следующие:

  • Переменные могут быть явно установлены как универсальные, глобальные, локальные или относящиеся к функции. Переменные с одинаковым именем, но в разных областях действия, не будут изменены.
  • Если область действия переменной не задана явно, но переменная с таким именем была определена ранее, используется область действия существующей переменной. Если переменная уже определена в нескольких областях действия, будет обновлена переменная с наименьшей областью действия.
  • Если область действия переменной не задана явно и нет существующей переменной с таким именем, переменная будет локальной для текущей выполняемой функции. Обратите внимание, что это отличается от использования флагов -l или --local, в этом случае переменная будет локальной для наиболее внутреннего из текущих выполняемых блоков, в то время как без них переменная будет локальной для всей функции. Если функция не выполняется, переменная будет установлена в глобальной области.

Правила экспорта при создании или обновлении переменной идентичны правилам области действия для переменных:

  • Переменные могут быть явно установлены как экспортируемые или не экспортируемые. Когда экспортируемая переменная выходит из области действия, она становится неэкспортируемой.
  • Если переменная не задана явно как экспортируемая или неэкспортируемая, но была определена ранее, сохраняется предыдущее правило экспорта для переменной.
  • Если переменная не явно задана как экспортируемая или неэкспортируемая и ранее никогда не была определена, переменная не будет экспортироваться.

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

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

set требует, чтобы все параметры предшествовали другим аргументам. Например, set flags -l будет иметь эффект установки значения переменной flags в ‘-l’, а не делая переменную локальной.

Код выхода

В режиме присваивания set не изменяет код выхода, а передает то, что было установлено status, включая подстановку команд. Это позволяет захватить вывод и код выхода подкоманды, как в if set output (command).

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

В режиме удаления set завершается с кодом выхода 0 в случае успеха, с ненулевым кодом выхода, если командная строка некорректна, если какая-либо переменная не существовала или была специальной неизменяемой переменной.

Примеры

Вывести все глобальные, экспортируемые переменные:

> set -gx

Установить значение переменной _$foo_ в ‘hi’.:

> set foo hi

Добавить значение “there” к переменной $foo:

> set -a foo there

Удалить _$smurf_ из области действия:

> set -e smurf

Удалить _$smurf_ из глобальной и универсальной области действия:

> set -e -Ug smurf

Изменить четвёртый элемент списка $PATH на ~/bin:

> set PATH[4] ~/bin

Выводит путь к Python, если type -p возвращает true:

if set python_path (type -p python)
    echo "Python is at $python_path"
end

Установка переменной не изменяет $status; подстановка команды всё же изменит:

> echo $status
0
> false
> set foo bar
> echo $status
1
> true
> set foo banana (false)
> echo $status
1

VAR=VALUE command устанавливает переменную только для одной команды, как и другие оболочки. Это выполняет fish с временным каталогом домашней директории:

> HOME=(mktemp -d) fish

(что по сути эквивалентно):

> begin; set -lx HOME (mktemp -d); fish; end

Примечания

  • Версии Fish до 3.0 поддерживали синтаксис set PATH[1] PATH[4] /bin /sbin, который работал как set PATH[1 4] /bin /sbin.

© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/cmds/set.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API