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