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