Spec-Zone.ru › Fish 3.5

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 завершается с нулевым статусом завершения в случае успеха, с ненулевым статусом завершения, если командная строка недопустима, если какая-либо из переменных не существует или является специальной неизменяемой переменной.

Примеры

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

Spec-Zone.ru

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