Spec-Zone.ru › Fish 3.2

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

При указании имён и значений переменных, set присваивает переменной VARIABLE_NAME значения VALUES....

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

  • -a или --append добавляет значения к текущему набору значений для переменной. Это может быть использовано с --prepend для одновременного добавления и вставки. Это нельзя использовать при присвоении переменной срезу.
  • -p или --prepend вставляет значения в начало текущего набора значений для переменной. Это можно использовать с --append для одновременного добавления и вставки. Это нельзя использовать при присвоении переменной срезу.
  • -l или --local устанавливает указанную переменную оболочки в локальной области действия текущего блока, даже если переменная с таким именем существует и находится в другой области действия.
  • -g или --global устанавливает указанную переменную оболочки в глобальную область действия. Неглобальные переменные исчезают при завершении блока, к которому они относятся.
  • -U или --universal устанавливает указанную переменную оболочки во всеобщую область действия. Если этот параметр указан, переменная будет доступна во всех экземплярах оболочки текущего пользователя на данном компьютере и сохранится после перезапуска оболочки.
  • -x или --export экспортирует указанную переменную оболочки в дочерние процессы (делая её "переменной среды")
  • -u или --unexport предотвращает экспорт указанной переменной оболочки в дочерние процессы
  • --path делает указанную переменную переменной пути, что означает её автоматическое разделение по двоеточиям и объединение по двоеточиям при использовании кавычек (echo "$PATH") или экспорте.
  • --unpath отменяет обработку указанной переменной как переменной пути. Переменные с именем, заканчивающимся на "PATH", автоматически являются переменными пути, поэтому это можно использовать для обработки такой переменной как обычной.

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

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

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

Spec-Zone.ru

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