Spec-Zone.ru › Fish 3.7

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 манипулирует переменными оболочки.

Если указаны и ИМЯ, и ЗНАЧЕНИЕ, set присваивает значения переменной ИМЯ. Переменные в fish являются списками, разрешается несколько значений. Можно указать один или несколько индексов переменной ИНДЕКС, включая диапазоны (не для всех опций).

Если ЗНАЧЕНИЕ не указано, переменная будет установлена в пустой список.

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

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

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

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

-U или --universal

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

-f или --function

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

-l или --local

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

-g или --global

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

Эти опции изменяют способ работы переменных:

--export или -x

Делает указанную переменную оболочки доступной дочерним процессам (делает её «переменной окружения»).

--unexport или -u

Делает указанную переменную оболочки недоступной дочерним процессам.

--path

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

--unpath

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

Дополнительные опции:

-a или --append ИМЯ ЗНАЧЕНИЕ …

Добавляет ЗНАЧЕНИЯ к текущим значениям переменной ИМЯ. Может использоваться с --prepend для одновременного добавления и вставки в начало. Нельзя использовать при присваивании части переменной.

-p или --prepend ИМЯ ЗНАЧЕНИЕ …

Вставляет ЗНАЧЕНИЯ в начало текущих значений переменной ИМЯ. Может использоваться с --append для одновременного добавления и вставки в начало. Нельзя использовать при присваивании части переменной.

-e или --erase ИМЯ*[*ИНДЕКС]

Удаляет указанные переменные оболочки. Поддерживает удаление из нескольких областей видимости сразу. Можно указать отдельные элементы переменной с индексом ИНДЕКС в квадратных скобках.

-q или --query ИМЯ*[*ИНДЕКС]

Проверяет, определены ли указанные имена переменных. Если указан ИНДЕКС, проверяются элементы с этим индексом. Ничего не выводит, но состояние оболочки устанавливается в количество не определённых переменных, не более 255. Если не указано ни одной переменной, возвращается 255.

-n или --names

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

-S или --show

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

-L или --long

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

-h или --help

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

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

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

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

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

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

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

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

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

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

Код возврата

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

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

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

Примеры

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

> 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.7/cmds/set.html

Spec-Zone.ru

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