Spec-Zone.ru › Fish 3.1

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

Доступны следующие опции:

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

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

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

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

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

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

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

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

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

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

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

В режиме присваивания set не изменяет код возврата. Это позволяет одновременно получить выходные данные и код возврата подкоманды, например, 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

# Like other shells, fish 3.1 supports this syntax for passing 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. Этот синтаксис не был широко распространён, был неоднозначным и несогласованным.

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

Spec-Zone.ru

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