Spec-Zone.ru › Fish 3.4

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

Резюме

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

Описание

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

Если заданы как ПЕРЕМЕННАЯ, так и ЗНАЧЕНИЯ, set присваивает значения переменной с указанным именем. Поскольку все переменные в fish представляют собой списки, разрешается несколько значений.

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

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

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

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

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

-f или --function

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

-l или --local

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

-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 не сокращать длинные значения.

-h или --help

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

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

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

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

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

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

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

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

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

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

Код завершения

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

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

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

Примеры

# 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. Этот синтаксис не был широко распространён, был неоднозначным и несогласованным.

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

Spec-Zone.ru

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