Spec-Zone.ru › Fish 3.3

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

Синопсис

set [SCOPE_OPTIONS]
set [OPTIONS] VARIABLE_NAME VALUES...
set [OPTIONS] VARIABLE_NAME[INDICES]... VALUES...
set ( -q | --query ) [SCOPE_OPTIONS] VARIABLE_NAMES...
set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME...
set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME[INDICES]...
set ( -S | --show ) [VARIABLE_NAME]...

Описание

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

Если указаны и имя переменной, и значения, set присваивает значения переменной с этим именем. Поскольку все переменные в fish являются списками, разрешается несколько значений.

Если указано только имя переменной, set присваивает переменной пустой список.

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

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

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

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

  • -l или --local принудительно задаёт указанной переменной оболочки область видимости, локальную для текущего блока, даже если переменная с данным именем существует и является нелокальной
  • -g или --global присваивает указанной переменной оболочки глобальную область видимости. Неглобальные переменные исчезают, когда заканчивается блок, к которому они относятся
  • -U или --universal присваивает указанной переменной оболочки универсальную область видимости. Если указан этот параметр, переменная будет доступна во всех текущих пользовательских экземплярах fish на текущем компьютере и сохранится при перезапуске оболочки.

Эти параметры контролируют дополнительные параметры переменных:

  • -x или --export делает указанную переменную оболочки доступной для дочерних процессов (превращая её в «переменную окружения»)
  • -u или --unexport предотвращает экспорт указанной переменной оболочки в дочерние процессы
  • --path делает указанную переменную переменной пути, что означает автоматическое разделение по двоеточиям и объединение с помощью двоеточий при цитировании (echo "$PATH") или экспорте.
  • --unpath предотвращает обработку переменной как переменной пути. Переменные с именем, заканчивающимся на «PATH», автоматически являются переменными пути, поэтому это можно использовать для обычного обращения с такой переменной.

Доступны следующие другие параметры:

  • -a или --append добавляет значения к текущему набору значений переменной. Это можно использовать с --prepend для одновременного добавления и вставки в начало. Это нельзя использовать при присваивании срезу переменной.
  • -p или --prepend вставляет значения в начало текущего набора значений переменной. Это можно использовать с --append для одновременного добавления и вставки в начало. Это нельзя использовать при присваивании срезу переменной.
  • -e или --erase удаляет указанные переменные оболочки
  • -q или --query проверяет, определены ли заданные имена переменных. Ничего не выводит, но код вывода встроенных функций является числом переменных, указанных в списке, которые не определены, или 255, если не определено более 255 переменных.
  • -n или --names: Выводит только имена всех определённых переменных, а не их значения. Имена гарантированно отсортированы.
  • -S или --show отображает информацию о заданных переменных. Если имена переменных не указаны, то все переменные отображаются в отсортированном порядке. Отображаются объёмы, в которых заданы переменные, вместе со значениями в каждом и экспортирована ли она или нет. Другие флаги с этим параметром использовать нельзя.
  • -L или --long не сокращает длинные значения при выводе переменных set

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

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

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

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

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

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

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

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

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

Код выхода

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

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

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

Примеры

# Prints all global, exported variables.
set -xg

# Sets the value of the variable $foo to be 'hi'.
set foo hi

# Appends the value "there" to the variable $foo.
set -a foo there

# Does the same thing as the previous two commands the way it would be done pre-fish 3.0.
set foo hi
set foo $foo there

# Removes the variable $smurf
set -e smurf

# Changes the fourth element of the $PATH list to ~/bin
set PATH[4] ~/bin

# Outputs the path to Python if ``type -p`` returns true.
if set python_path (type -p python)
    echo "Python is at $python_path"
end

# Setting a variable doesn't modify $status!
false
set foo bar
echo $status # prints 1, because of the "false" above.

true
set foo banana (false)
echo $status # prints 1, because of the "(false)" above.

# Like other shells, pass a variable to just one command:
# Run fish with a temporary home directory.
HOME=(mktemp -d) fish
# Which is essentially the same as:
begin; set -lx HOME (mktemp -d); fish; end

Примечания

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

© 2021 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.3/cmds/set.html

Spec-Zone.ru

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