Справочник команд
fish поставляется с большим количеством встроенных команд, функций shellscript и внешних команд. Они все описаны ниже.
Практически все команды fish реагируют на опции -h или --help, чтобы отобразить соответствующую справку, также доступную с помощью команд help и man, например так:
echo -h echo --help # Prints help to the terminal window man echo # Displays the man page in the system pager # (normally 'less', 'more' or 'most'). help echo # Open a web browser to show the relevant documentation
abbr - управление сокращениями fish
Синтаксис
abbr --add word phrase... abbr --rename word new_word abbr --show abbr --list abbr --erase word
Описание
abbr манипулирует списком сокращений, которые будет расширять fish.
Сокращения — это определенные пользователем последовательности символов или слова, которые заменяются более длинными фразами после их ввода. Например, часто используемая команда, такая как git checkout, может быть сокращена до gco. После ввода gco и нажатия Пробел или Ввод, полный текст git checkout появится в строке команд.
Сокращения хранятся в переменной, названной fish_user_abbreviations. Она автоматически создается как универсальная переменная при первом создании сокращения. Если вы хотите, чтобы ваши сокращения были приватными для конкретной сессии fish, вы можете поместить следующее в файл *~/.config/fish/config.fish* перед определением первого сокращения:
if status --is-interactive
set -g fish_user_abbreviations
abbr --add first 'echo my first abbreviation'
abbr --add second 'echo my second abbreviation'
# etcetera
end
Вы можете создавать сокращения непосредственно в командной строке, и они будут автоматически сохранены и станут видимыми для других сессий fish, если fish_user_abbreviations является универсальной переменной. Если вы сохраняете переменную универсальной, abbr --add инструкции в config.fish не сделают ничего, кроме незначительного замедления запуска.
Опции
Доступны следующие параметры:
-
-a WORD PHRASEили--add WORD PHRASEДобавляет новое сокращение, вызывая расширение WORD до PHRASE. -
-r WORD NEW_WORDили--rename WORD NEW_WORDПереименовывает сокращение со слова WORD на NEW_WORD. -
-sили--showПоказывает все сокращенные слова и их расширенные фразы способом, подходящим для экспорта и импорта. -
-lили--listВыводит список всех сокращенных слов. -
-e WORDили--erase WORDУдаляет сокращение WORD.
Примечание: версия fish 2.1 поддерживала -a WORD=PHRASE. Этот синтаксис теперь устарел, но все равно будет преобразован.
Примеры
abbr -a gco git checkout
Добавить новое сокращение, где gco будет заменено на git checkout.
abbr -r gco gch
Переименовать существующее сокращение со слова gco на gch.
abbr -e gco
Удалить сокращение gco.
ssh another_host abbr -s | source
Импортировать сокращения, определенные на another_host через SSH.
Назад к индексу команд.
alias - создание функции
Синтаксис
alias alias NAME DEFINITION alias NAME=DEFINITION
Описание
alias — это простой обертка для встроенной команды function, которая создаёт функцию, оборачивающую команду. Она имеет похожий синтаксис, что POSIX shell alias. Для других целей рекомендуется определить функцию.
fish помечает функции, созданные с помощью alias, включая использованную команду в описании функции. Вы можете перечислить функции, созданные с помощью alias, запустив alias без аргументов. Они должны быть удалены с помощью functions -e.
-
NAME— имя псевдонима -
DEFINITION— фактическая команда для выполнения. Строка$argvбудет добавлена.
Вы не можете создать псевдоним для функции с тем же именем. Обратите внимание, что пробелы необходимо экранировать при вызове alias так же, как и в командной строке, даже внутри цитированных частей.
Пример
Следующий код создаст rmi, который выполнит rm с дополнительными аргументами при каждом вызове.
alias rmi="rm -i"
# This is equivalent to entering the following function:
function rmi --wraps rm --description 'alias rmi=rm -i'
rm -i $argv
end
# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":
alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'
Назад к индексу команд.
and - условное выполнение команды
Синтаксис
COMMAND1; and COMMAND2
Описание
and используется для выполнения команды, если текущий код выхода (установленный предыдущей командой) равен 0.
and операторы могут быть использованы в качестве части условия в блоке if или while. См. документацию для if и while для примеров.
and не изменяет текущий код выхода сам по себе, но команда, которую он выполняет, скорее всего, изменит его. Код выхода последней вызвавшей команду всегда можно получить с помощью переменной $status.
Пример
Следующий код выполняет команду make для сборки программы. Если сборка прошла успешно, код выхода make равен 0, и программа устанавливается. Если любой из этапов завершился ошибкой, код выхода равен 1, и выполняется make clean, который удаляет файлы, созданные в процессе сборки.
make; and make install; or make clean
Назад к индексу команд.
argparse - парсинг опций, переданных скрипту или функции fish
Синтаксис
argparse [OPTIONS] OPTION_SPEC... -- [ARG...]
Описание
Эта команда упрощает обработку аргументов для скриптов и функций fish таким же образом, как встроенные команды fish обрабатывают свои аргументы. Вы передаёте последовательность аргументов, определяющих распознаваемые опции, за которой следует буквальное --, а затем аргументы для парсинга (которые также могут включать буквальное --). Подробнее об этом в разделе использование ниже.
Каждый OPTION_SPEC может быть записан на языке домен-специфического языка описанном ниже или создан с помощью сопутствующей команды fish_opt. Все OPTION_SPECs должны появляться после флагов argparse и перед --, разделяющим их с аргументами, подлежащими парсингу.
Каждая опция, увиденная в списке ARG, приведет к имени переменной вида _flag_X, где X — это короткая буква флага, а _flag_X — длинное имя флага. OPTION_SPEC всегда требует короткого флага, даже если он не может быть использован. Поэтому всегда будет установлена переменная _flag_X с использованием короткой буквы флага, если соответствующий короткий или длинный флаг виден. Переменная с длинным именем флага (например, _flag_help) будет определена только в том случае, если OPTION_SPEC включает длинное имя флага.
Например, _flag_h и _flag_help, если виден -h или --help. Переменная будет установлена с локальной областью видимости (как будто скрипт выполнил set -l _flag_X). Если флаг является булевым (то есть не имеет связанного значения), значениями являются короткий и длинный флаги, увиденные. Если опция не является булевым флагом, значениями будут ноль или более значений, соответствующих значениям, собранным при обработке списка ARG. Если флаг не был увиден, переменная флага не будет установлена.
Доступны следующие argparse опции. Они должны предшествовать всем OPTION_SPECs:
-
-nили--name— это имя команды, которое будет вставлено в любые сообщения об ошибках. Если вы не укажите это значение, будет использоватьсяargparse. -
-xили--exclusiveдолжны следовать за запятыми список коротких или длинных опций, которые взаимоисключающие. Вы можете использовать эту опцию более одного раза, чтобы определить несколько наборов взаимоисключающих опций. -
-Nили--min-argsследует за целым числом, определяющим минимальное количество допустимых аргументов, не являющихся опциями. По умолчанию ноль. -
-Xили--max-argsследует за целым числом, определяющим максимальное количество допустимых аргументов, не являющихся опциями. По умолчанию бесконечность. -
-sили--stop-nonoptостанавливает сканирование аргументов, как только обнаруживается первый аргумент, не являющийся опцией. Использование этого аргумента эквивалентно вызову функции Cgetopt_long()с короткими опциями, начинающимися с символа+. Это иногда называется «POSIX-совместимым». Если этот флаг не используется, аргументы переупорядочиваются (т. е., переставляются), так что все аргументы, не являющиеся опциями, перемещаются после аргументов опций. Этот режим имеет несколько применений, но основное — реализовать команду с подкомандами. -
-hили--helpотображает справку по использованию этой команды.
Использование
Использование этой команды предполагает передачу двух наборов аргументов, разделенных --. Первый набор состоит из одного или нескольких спецификаций опций (OPTION_SPEC выше) и опций, которые изменяют поведение argparse. Они должны быть перечислены перед аргументом -- . Второй набор — это аргументы, подлежащие парсингу в соответствии со спецификациями опций. Они появляются после аргумента -- и могут быть пустыми. Подробнее об этом ниже, но вот простой пример, который может быть использован в функции под названием my_function:
argparse --name=my_function 'h/help' 'n/name:' -- $argv or return
Если $argv пусто, то парсить нечего, и argparse возвращает ноль, чтобы указать успех. Если $argv не пусто, то проверяются флаги -h, --help, -n и --name. Если они найдены, они удаляются из аргументов, и локальные переменные (подробнее об этом в разделе ниже) устанавливаются так, чтобы сценарий мог определить, какие опции были обнаружены. При условии, что $argv не имеет ошибок, таких как отсутствие обязательного значения для опции, argparse завершается с кодом выхода ноль. В противном случае он записывает соответствующие сообщения об ошибках в стандартный поток ошибок и завершается с кодом выхода один.
Отсутствие аргумента -- является ошибкой. Вы не обязаны включать какие-либо аргументы после аргумента --, но вы должны включить --. Например, это допустимо:
set -l argv argparse 'h/help' 'n/name' -- $argv
Но это не так:
set -l argv argparse 'h/help' 'n/name' $argv
Первый -- позволяет команде argparse надёжно разделить спецификации опций и аргументы команды.
Спецификации опций
Каждая спецификация опции — это строка, состоящая из
- Короткий флаг-символ (обязательный). Он должен быть буквенно-цифровым или "#". Символ "#" специальный и означает, что флаг вида
-123является допустимым. Короткий флаг "#" должен быть последован знаком "-" (так как короткое имя само по себе недопустимо, так как_flag_#не является допустимым именем переменной) и должен быть последован именем длинного флага без модификаторов. /если короткий флаг может использоваться при вызове вашей команды, иначе-, если он не должен быть доступен как допустимый короткий флаг. Если нет имени длинного флага, эти символы должны быть опушены. Вы также можете указать '#' для обозначения того, что имена коротких и длинных флагов могут использоваться, и значение может быть задано как неявное целое число; т.е., флаг вида-NNN.- Имя длинного флага, необязательное. Если его нет, то можно использовать только короткий флаг-символ.
- Ничего, если флаг — это булево значение, не принимающее аргументы, или неявный флаг целого типа, иначе
-
=если он требует значения и сохраняется только последнее вхождение флага, иначе -
=?он принимает необязательное значение и сохраняется только последнее вхождение флага, иначе -
=+если он требует значения, сохраняются все вхождения флага. - Необязательно
!, после которого следует скрипт Fish для проверки значения. Обычно это будет функция для выполнения. Если возвращаемый код равен нулю, значение флага является допустимым. Если ненулевой, значение недопустимо. Любые сообщения об ошибках должны быть выведены в стандартный вывод (а не в стандартный поток ошибок). Более подробную информацию см. в разделе Проверка значений флагов.
См. команду fish_opt для более удобного, но более подробного способа создания спецификаций опций.
В следующих примерах, если флаг не виден при анализе аргументов, соответствующие переменные _flag_X не будут установлены.
Проверка значений флагов
Часто требуется проверить, что значение, предоставленное для опции, соответствует определённым критериям. Например, что это целое число в определённом диапазоне. Вы всегда можете сделать это после того, как argparse вернётся, но вы также можете попросить argparse выполнить проверку, выполнив произвольный скрипт Fish. Для этого просто добавьте ! (восклицательный знак), а затем скрипт Fish для выполнения. При выполнении этого кода будут определены три переменные:
-
_argparse_cmdбудет установлено значение значенияargparse --name. -
_flag_nameбудет установлено для короткого или длинного флага, который обрабатывается. -
_flag_valueбудет установлено для значения, связанного с обрабатываемым флагом.
Если вы делаете это через функцию, она должна быть определена с флагом --no-scope-shadowing. В противном случае у неё не будет доступа к этим переменным.
Скрипт должен выводить любые сообщения об ошибках в стандартный вывод, а не в стандартный поток ошибок. Он должен возвращать статус 0, если значение флага является допустимым, иначе ненулевой статус, чтобы указать, что оно недопустимо.
Fish поставляется с функцией _validate_int, которая принимает флаги --min и --max. Предположим, ваша команда принимает флаги -m или --max и минимальное допустимое значение равно нулю, а максимальное — 5. Вы определите опцию следующим образом: m/max=!_validate_int --min 0 --max 5. По умолчанию, если вы просто вызовете _validate_int без этих флагов, будет проверено, что значение является допустимым целым числом без ограничений на минимальное и максимальное допустимое значение.
Примеры OPTION_SPEC
Некоторые примеры OPTION_SPEC:
-
h/helpозначает, что оба-hи--helpдопустимы. Флаг является булевым и может использоваться более одного раза. Если любой из флагов используется,_flag_hи_flag_helpбудут установлены со значением количества раз, когда был замечен соответствующий флаг. -
h-helpозначает, что только--helpдопустим. Флаг является булевым и может использоваться более одного раза. Если используется длинный флаг,_flag_hи_flag_helpбудут установлены со значением количества раз, когда был замечен длинный флаг. -
n/name=означает, что оба-nи--nameдопустимы. Он требует значения и может использоваться не более одного раза. Если флаг виден,_flag_nи_flag_nameбудут установлены с единственным обязательным значением, связанным с флагом. -
n/name=?означает, что оба-nи--nameдопустимы. Он принимает необязательное значение и может использоваться не более одного раза. Если флаг виден,_flag_nи_flag_nameбудут установлены со значением, связанным с флагом, если оно было предоставлено, иначе оно будет установлено без значений. -
n-name=+означает, что только--nameдопустим. Он требует значения и может использоваться более одного раза. Если флаг виден,_flag_nи_flag_nameбудут установлены со значениями, связанными с каждым вхождением флага. -
xозначает, что только-xдопустим. Это булево значение и может использоваться более одного раза. Если оно встречается,_flag_xбудет установлено со значением количества раз, когда был замечен флаг. -
x=,x=?, иx=+аналогичны примерам с n/name, но нет альтернативы длинного флага для короткого флага-x. -
x-не допустим, так как нет имени длинного флага, и поэтому короткий флаг-xдолжен быть применимым. Это очевидно верно, вне зависимости от того, содержит ли спецификация также один из:,::,+. -
#-maxозначает, что флаги, соответствующие регулярному выражению "^--?\d+$", допустимы. При их обнаружении они присваиваются переменной_flag_max. Это позволяет задать любое допустимое целое положительное или отрицательное число, добавив префикс "-" . Многие команды поддерживают этот приём. Например,head -3 /a/fileдля вывода только первых трёх строк файла /a/file. -
n::maxозначает, что флаги, соответствующие регулярному выражению "^--?\d+$", допустимы. При их обнаружении они присваиваются переменным_flag_nи_flag_max. Это позволяет задать любое допустимое целое положительное или отрицательное число, добавив префикс "-". Многие команды поддерживают этот приём. Например,head -3 /a/fileдля вывода только первых трёх строк файла /a/file. Вы также можете задать значение, используя любой флаг:-n NNNили--max NNNв этом примере.
После анализа аргументов переменная argv устанавливается с локальным объёмом для любых значений, ещё не использованных во время обработки флагов. Если нет свободных значений, переменная устанавливается, но count $argv будет равна нулю.
Если во время обработки аргументов argparse произошла ошибка, выполнение завершится с ненулевым статусом, а соответствующие сообщения об ошибках выводятся в стандартный поток ошибок.
Примечания
До добавления этой встроенной команды в релизе 2.7.0 существовало два основных способа анализа аргументов, передаваемых скрипту или функции Fish. Один из способов — использовать предоставленную ОС команду getopt. Проблема заключается в том, что реализации GNU и BSD несовместимы. Это затрудняет использование этой внешней команды, за исключением тривиальных ситуаций. Другой способ — перебирать $argv и использовать оператор Fish switch для определения того, как обработать аргумент. Однако это влечёт за собой большое количество вспомогательного кода. Также практически невозможно реализовать такое же поведение, как у встроенных команд.
Вернуться к списку команд.
begin - начать новый блок кода
Синтаксис
begin; [COMMANDS...;] end
Описание
begin используется для создания нового блока кода.
Блок выполняется безусловно. begin; ...; end эквивалентно if true; ...; end.
begin используется для группировки нескольких команд в блок. Это позволяет ввести новую область видимости переменных, перенаправить входные или выходные данные набора команд как группы или указать приоритет при использовании условных команд, таких как and.
begin не изменяет текущий код возврата сам по себе. После завершения блока $status будет установлено значение статуса, возвращённого последней командой.
Пример
Следующий код задаёт ряд переменных внутри области видимости блока. Поскольку переменные определяются внутри блока и имеют локальную область видимости, они будут автоматически удалены по завершении блока.
begin
set -l PIRATE Yarrr
...
end
echo $PIRATE
# This will not output anything, since the PIRATE variable
# went out of scope at the end of the block
В следующем коде весь вывод перенаправляется в файл out.html.
begin
echo $xml_header
echo $html_header
if test -e $file
...
end
...
end > out.html
Вернуться к списку команд.
bg - переместить задачи в фоновый режим
Синтаксис
bg [PID...]
Описание
bg переводит задачи в фоновый режим, возобновляя их, если они приостановлены. Задача в фоновом режиме выполняется одновременно с Fish и не имеет доступа к клавиатуре. Если не указана задача, последняя использованная задача помещается в фоновый режим. Если указан PID, в фоновый режим помещаются задачи с указанными идентификаторами группы процессов.
Идентификатор процесса целевой задачи обычно находится с помощью расширения процесса.
Если хотя бы один из аргументов не является допустимым идентификатором задачи (т. е. PID), bg выведет ошибку, не переводя ничего в фоновый режим.
Если все аргументы являются допустимыми идентификаторами задач, bg переведёт все соответствующие существующие задачи в фоновый режим.
Пример
bg %1 поместит задачу с идентификатором 1 в фоновый режим.
bg 123 456 789 поместит задачи 123, 456 и 789 в фоновый режим.
Если существуют только 123 и 789, они всё равно будут помещены в фоновый режим, а об ошибке 456 будет выведено сообщение.
bg 123 banana или bg banana 123 выдадут сообщение об ошибке, что "banana" не является допустимым идентификатором задачи.
Вернуться к списку команд.
bind - обработка привязок клавиш Fish
Синтаксис
bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE]
[(-k | --key)] SEQUENCE COMMAND [COMMAND...]
bind [(-M | --mode) MODE] [(-k | --key)] SEQUENCE
bind (-K | --key-names) [(-a | --all)]
bind (-f | --function-names)
bind (-L | --list-modes)
bind (-e | --erase) [(-M | --mode) MODE]
(-a | --all | [(-k | --key)] SEQUENCE [SEQUENCE...])
Описание
bind добавляет привязку для указанной последовательности клавиш к указанной команде.
SEQUENCE — это последовательность символов, к которой нужно привязать. Эти последовательности должны быть записаны как последовательности экранирования fish. Например, поскольку нажатие клавиши Alt и другой клавиши отправляет этот символ с префиксом символа экранирования, привязки клавиш, основанные на Alt, можно записывать с использованием экранирования \e. Например, Alt-w можно записать как \ew. Символ управления можно записать аналогичным образом с использованием экранирования \c, например, Control-X (^X) можно записать как \cx. Обратите внимание, что привязки клавиш, основанные на Alt, чувствительны к регистру, а привязки, основанные на Control, — нет. Это ограничение текстовых терминалов, а не fish.
По умолчанию привязка клавиши может быть установлена путём указания SEQUENCE пустой строки (то есть ''). Она будет использоваться всякий раз, когда ни одна другая привязка не соответствует. Для большинства привязок клавиш имеет смысл использовать функцию self-insert (то есть bind '' self-insert) в качестве привязки по умолчанию. Это вставит любые нажатия клавиш, которые не привязаны к чему-либо, в редактор. Непечатаемые символы игнорируются редактором, поэтому это не приведёт к отображению управляющих последовательностей.
Если используется переключатель -k, вместо последовательности используется имя клавиши (например, «вниз», «вверх» или «удалить»). Имена такие же, как соответствующие переменные curses, но без префикса «key_». (См. terminfo(5) для получения дополнительной информации или используйте bind --key-names для получения списка всех доступных именованных клавиш.)
COMMAND может быть любой командой fish, но она также может быть одной из набора специальных функций ввода. К ним относятся функции для перемещения курсора, работы с кольцом уничтожения, выполнения завершения по вводу с табуляцией и т. д. Используйте bind --function-names для получения полного списка этих функций ввода.
Когда COMMAND — это команда скрипта оболочки, рекомендуется поместить фактический код в функцию и просто привязать к имени функции. Таким образом, тестирование функции во время редактирования становится намного проще, а результат, как правило, более читабелен.
Если такой скрипт генерирует вывод, скрипт должен завершиться вызовом commandline -f repaint, чтобы сообщить fish о необходимости перерисовки.
Если предоставлено несколько COMMAND, все они выполняются в указанном порядке при нажатии клавиши. Обратите внимание, что специальные функции ввода нельзя комбинировать с обычными командами скриптов оболочки. Команды должны быть полностью последовательностью специальных функций ввода (из bind -f) или всех команд скриптов оболочки (т. е. допустимого скрипта fish).
Если SEQUENCE не указано, выводятся все привязки (или только привязки в указанном MODE). Если SEQUENCE указано без COMMAND, выводится только соответствующая привязка.
Привязки клавиш по умолчанию не сохраняются между сессиями. Одиночные bind операторы в config.fish не повлияют, поскольку он подключается до настройки стандартных привязок клавиш. Чтобы сохранить пользовательские привязки клавиш, поместите bind операторы в функцию с именем fish_user_key_bindings, которая будет автоматически загружаться.
Привязки клавиш могут использовать «режимы», которые имитируют поведенческие особенности модального ввода Vi. Режим по умолчанию — «default», и каждая привязка применяется к одному режиму. Режим можно просмотреть/изменить с помощью переменной $fish_bind_mode.
Доступны следующие параметры:
-
-kили--keyУказывает имя клавиши, например, «влево» или «удалить», вместо последовательности символов -
-Kили--key-namesОтображает список доступных имён клавиш. Указание-aили--allвключает клавиши, для которых нет известной привязки -
-fили--function-namesОтображает список доступных функций ввода -
-Lили--list-modesОтображает список определённых режимов привязки -
-M MODEили--mode MODEУказывает режим привязки, в котором используется привязка. По умолчанию — «default» -
-m NEW_MODEили--sets-mode NEW_MODEИзменяет текущий режим наNEW_MODEпосле выполнения этой привязки -
-eили--eraseУдаляет привязку с заданной последовательностью и режимом вместо определения новой. Несколько последовательностей можно указать с этим флагом. Указание-aили--allс-Mили--modeудаляет все привязки в заданном режиме независимо от последовательности. Указание-aили--allбез-Mили--modeудаляет все привязки во всех режимах независимо от последовательности. -
-aили--allСм.--eraseи--key-names
Доступны следующие специальные функции ввода:
-
accept-autosuggestion, полностью принимает текущее автопредложение -
backward-char, перемещает курсор на один символ влево -
backward-bigword, перемещает одно слово (разделённое пробелами) влево -
backward-delete-char, удаляет один символ ввода слева от курсора -
backward-kill-bigword, перемещает слово, разделённое пробелами, слева от курсора в кольцо уничтожения -
backward-kill-line, перемещает всё от начала строки до курсора в кольцо уничтожения -
backward-kill-path-component, перемещает один компонент пути влево от курсора (всё от последнего «/» или пробела, исключая его) в кольцо уничтожения -
backward-kill-word, перемещает слово слева от курсора в кольцо уничтожения -
backward-word, перемещает одно слово влево -
beginning-of-buffer, перемещает курсор к началу буфера, то есть к началу первой строки -
beginning-of-history, перемещает курсор к началу истории -
beginning-of-line, перемещает курсор к началу строки -
begin-selection, начинает выделение текста -
capitalize-word, делает текущее слово заглавным -
complete, предполагает остаток текущего токена -
complete-and-search, вызывает страницу поиска со списком вариантов завершения (для удобства это также перемещает назад в страницу просмотра вариантов завершения) -
delete-char, удаляет один символ справа от курсора -
downcase-word, делает текущее слово строчными буквами -
end-of-buffer, перемещает курсор к концу буфера, то есть к концу первой строки -
end-of-history, перемещает курсор к концу истории -
end-of-line, перемещает курсор к концу строки -
end-selection, завершает выделение текста -
forward-bigword, перемещает одно слово (разделённое пробелами) вправо -
forward-char, перемещает курсор на один символ вправо -
forward-word, перемещает одно слово вправо -
history-search-backward, ищет в истории предыдущее совпадение -
history-search-forward, ищет в истории следующее совпадение -
kill-bigword, перемещает следующее слово, разделённое пробелами, в кольцо уничтожения -
kill-line, перемещает всё от курсора до конца строки в кольцо уничтожения -
kill-selection, перемещает выделенный текст в кольцо уничтожения -
kill-whole-line, перемещает строку в кольцо уничтожения -
kill-word, перемещает следующее слово в кольцо уничтожения -
suppress-autosuggestion, удаляет текущее автопредложение -
swap-selection-start-stop, переходит к другому концу выделенного текста без изменения выделения -
transpose-chars, переставляет два символа слева от курсора -
transpose-words, переставляет два слова слева от курсора -
upcase-word, делает текущее слово заглавным -
yank, вставляет последнюю запись из кольца уничтожения в буфер -
yank-pop, вращает к предыдущей записи в кольце уничтожения
Примеры
bind \cd 'exit'
Приводит к fish выходу при нажатии Control-D.
bind -k ppage history-search-backward
Выполняет поиск по истории при нажатии клавиши Page Up.
set -g fish_key_bindings fish_vi_key_bindings bind -M insert \cc kill-whole-line force-repaint
Включает привязки клавиш Vi и переопределяет Control-C для очистки строки ввода.
Особые случаи: символ экранирования
Клавиша Escape может использоваться самостоятельно, например, для переключения с режима вставки на обычный режим при использовании привязок клавиш Vi. Escape также может использоваться как клавиша «meta», чтобы указать начало последовательности экранирования, например, функции или стрелок. Также можно определить пользовательские привязки, начинающиеся с символа экранирования.
fish ожидает некоторое время после получения символа экранирования, чтобы определить, является ли он самостоятельным или частью последовательности экранирования. В ожидании дополнительные нажатия клавиш заставляют клавишу Escape действовать как клавишу meta. Если другие нажатия клавиш не поступают, она обрабатывается как самостоятельный escape. Время ожидания установлено в 300 миллисекунд (0,3 секунды) в стандартных привязках клавиш и в 10 миллисекунд в привязках клавиш vi. Его можно настроить, установив переменную fish_escape_delay_ms значением от 10 до 5000 мс. Рекомендуется сделать это универсальной переменной, которую вы установите один раз из интерактивной сессии.
Примечание: в fish 2.2.0 и более ранних версиях значение по умолчанию составляло 10 миллисекунд, и не было возможности его настроить. Это фактически делало невозможным использование escape как мета-клавиши.
Вернуться к индексу команд.
block — временно блокирует доставку событий
Краткое описание
block [OPTIONS...]
Описание
block предотвращает доставку и обработку событий, вызванных fish или командой emit, пока блок активен.
В функциях block может быть полезно при выполнении работы, которую нельзя прервать оболочкой.
Блок можно снять. Любые события, которые произошли во время активности блока, будут затем доставлены.
Блоки событий не следует путать с блоками кода, которые создаются с помощью begin, if, while или for
Доступны следующие параметры:
-
-lили--localАвтоматически снимает блок по окончании текущего вложенного блока кода -
-gили--globalНикогда не снимает блокировку автоматически -
-eили--eraseСнимает глобальный блок
Пример
# Create a function that listens for events function --on-event foo foo; echo 'foo fired'; end # Block the delivery of events block -g emit foo # No output will be produced block -e # 'foo fired' will now be printed
Примечания
Обратите внимание, что события принимаются только от текущего процесса fish, так как нет способа отправлять события из одного процесса fish в другой.
Назад к списку команд.
break - остановить текущий внутренний цикл
Синтаксис
LOOP_CONSTRUCT; [COMMANDS...] break; [COMMANDS...] end
Описание
break прерывает выполнение текущего цикла, например, цикла for или while. Обычно он добавляется внутри блока условия, такого как оператор if или switch.
Для break параметров нет.
Пример
Следующий код ищет все файлы .c, содержащие "smurf", и прерывает поиск при первом совпадении.
for i in *.c
if grep smurf $i
echo Smurfs are present in $i
break
end
end
Назад к списку команд.
breakpoint - запустить режим отладки
Синтаксис
breakpoint
Описание
breakpoint используется для остановки выполняемого скрипта и запуска интерактивного приглашения отладки.
Дополнительную информацию см. в разделе Отладка скриптов fish в руководстве fish.
Для breakpoint параметров нет.
Назад к списку команд.
builtin - выполнить встроенную команду
Синтаксис
builtin BUILTINNAME [OPTIONS...]
Описание
builtin заставляет оболочку использовать встроенную команду, а не функцию или программу.
Доступны следующие параметры:
-
-nили--namesВывести список всех определенных встроенных команд
Пример
builtin jobs # executes the jobs builtin, even if a function named jobs exists
Назад к списку команд.
case - условное выполнение блока команд
Синтаксис
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
Описание
switch выполняет один из нескольких блоков команд в зависимости от того, совпадает ли указанное значение с одним из нескольких значений с подстановкой шаблонов. case используется вместе с оператором switch, чтобы определить, какой блок следует выполнить.
Каждая команда case получает один или несколько параметров. Первая команда case с параметром, соответствующим строке, указанной в команде switch, будет вычислена. case параметры могут содержать подстановки шаблонов. Для предотвращения обычной подстановки шаблонов с использованием имён файлов, их необходимо экранировать или заключить в кавычки.
Обратите внимание, что в операторах case в fish нет прохода к следующему случаю. Выполняется только первый соответствующий случай.
Обратите внимание, что подстановки команд в операторе case будут вычислены даже если его тело не используется. Все подстановки, включая подстановки команд, должны быть выполнены до того, как значение будет сравнено с параметром.
Пример
Если переменная $animal содержит имя животного, следующий код попытается его классифицировать:
switch $animal
case cat
echo evil
case wolf dog human moose dolphin whale
echo mammal
case duck goose albatross
echo bird
case shark trout stingray
echo fish
# Note that the next case has a wildcard which is quoted
case '*'
echo I have no idea what a $animal is
end
Если вышеуказанный код был запущен с $animal установленным в whale, результатом будет mammal.
Назад к списку команд.
cd - изменение каталога
Синтаксис
cd [DIRECTORY]
Описание
cd изменяет текущий рабочий каталог.
Если DIRECTORY указан, он станет новым каталогом. Если параметр не указан, используется значение переменной среды HOME.
Если DIRECTORY является относительным путём, пути, найденные в массиве переменной среды CDPATH, будут использованы как префиксы для указанного пути.
Обратите внимание, что оболочка попытается изменить каталог без необходимости cd если имя каталога указано (начинается с ., / или ~, или заканчивается на /).
Fish также поставляет функцию-обёртку для встроенной команды cd, которая понимает cd - как изменение на предыдущий каталог. См. также prevd. Эта функция-обёртка сохраняет историю 25 наиболее недавно посещённых каталогов в глобальных переменных $dirprev и $dirnext. Если вы сделаете эти универсальные переменные, ваша история cd будет доступна во всех экземплярах fish.
Примеры
cd # changes the working directory to your home directory. cd /usr/src/fish-shell # changes the working directory to /usr/src/fish-shell
См. также
См. также команду cdh для изменения на недавно посещённый каталог.
Назад к списку команд.
cdh - перейти в недавно посещённый каталог
Синтаксис
cdh [ directory ]
Описание
cdh без аргументов выводит список недавно посещённых каталогов. Вы можете выбрать один из пунктов по букве или номеру. Вы также можете нажать tab, чтобы использовать страницу завершения для выбора элемента из списка. Если вы передадите один аргумент, это эквивалентно cd directory.
Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещённых каталогов. История хранится в переменных $dirprev и $dirnext, которые эта команда использует. Если вы сделаете эти универсальные переменные, ваша история cd будет доступна во всех экземплярах fish.
См. также
См. также команды prevd и pushd, которые также работают с недавней историей cd и предоставляются для совместимости с другими оболочками.
Назад к списку команд.
command - запустить программу
Синтаксис
command [OPTIONS] COMMANDNAME [ARGS...]
Описание
command заставляет оболочку выполнить программу COMMANDNAME и игнорировать любые функции или встроенные команды с тем же именем.
Доступны следующие параметры:
-
-aили--allвозвращает все внешние команды, найденные в$PATH, в порядке их обнаружения. -
-sили--searchвозвращает имя внешней команды, которая будет выполнена, или ничего, если в$PATHне найдено файла с указанным именем.
С опцией -s, command обрабатывает каждый аргумент как отдельную команду для поиска и устанавливает код выхода в 0, если хотя бы одна из указанных команд найдена, или 1, если ни одна команда не найдена. Кроме того, передача опции -q или --quiet предотвращает вывод путей, таких как type -q, для тестирования только кода выхода.
Для обеспечения базовой совместимости с POSIX command, флаг -v распознаётся как псевдоним для -s.
Примеры
command ls заставляет fish выполнить программу ls, даже если существует функция ls.
command -s ls возвращает путь к программе ls.
Назад к списку команд.
commandline - установить или получить текущий буфер команды
Синтаксис
commandline [OPTIONS] [CMD]
Описание
commandline может использоваться для установки или получения текущего содержимого буфера командной строки.
Без параметров commandline возвращает текущее значение командной строки.
С CMD, буфер командной строки очищается и заменяется содержимым CMD.
Доступны следующие параметры:
-
-Cили--cursorустановить или получить текущую позицию курсора, а не содержимое буфера. Если аргумент не задан, выводится текущая позиция курсора, в противном случае аргумент интерпретируется как новая позиция курсора. -
-fили--functionвводит функции readline в ридер. Этот параметр нельзя комбинировать ни с каким другим. Он вызовет интерпретацию дополнительных аргументов как функций readline, и эти функции будут введены в ридер, так что они будут возвращены ридеру до чтения дополнительных фактических нажатий клавиш.
Следующие параметры изменяют способ, которым commandline обновляет буфер командной строки:
-
-aили--appendне удаляет текущую командную строку, добавляет указанную строку в конец -
-iили--insertне удаляет текущую командную строку, вставляет указанную строку в текущую позицию курсора -
-rили--replaceудаляет текущую командную строку и заменяет её указанной строкой (по умолчанию)
Следующие параметры изменяют ту часть командной строки, которая выводится или обновляется:
-
-bили--current-bufferвыбирает весь буфер (по умолчанию) -
-jили--current-jobвыбирает текущую задачу -
-pили--current-processвыбирает текущий процесс -
-tили--current-tokenвыбирает текущий токен.
Следующие параметры изменяют способ, которым commandline выводит текущий буфер командной строки:
-
-cили--cut-at-cursorвыводит только выделение до текущей позиции курсора -
-oили--tokenizeразбивает выделение на токены и выводит по одному строковому токену на строку
Если commandline вызывается во время вызова для завершения заданной строки с использованием complete -C STRING, commandline будет рассматривать указанную строку как текущее содержимое командной строки.
Следующие параметры выводят метаданные о состоянии командной строки:
-
-Lили--lineвыводит строку, на которой находится курсор, причём верхняя строка начинается с 1 -
-Sили--search-modeвычисляется как true, если командная строка выполняет поиск по истории -
-Pили--paging-modeвычисляется как true, если командная строка показывает содержимое страницы, такое как дополнение по вводу
Пример
commandline -j $history[3] заменяет задачу под курсором третьим элементом из истории командной строки.
Если командная строка содержит
> echo $flounder >&2 | less; and echo $catfish
(с курсором на букве «о» в слове «flounder»)
Тогда следующие вызовы ведут себя так:
> commandline -t $flounder > commandline -ct $fl > commandline -b ## or just commandline echo $flounder >&2 | less; and echo $catfish > commandline -p echo $flounder >&2 > commandline -j echo $flounder >&2 | less
Вернуться к списку команд.
complete - редактирование командных автозаполнений
Краткое описание
complete ( -c | --command | -p | --path ) COMMAND
[( -c | --command | -p | --path ) COMMAND]...
[( -e | --erase )]
[( -s | --short-option ) SHORT_OPTION]...
[( -l | --long-option | -o | --old-option ) LONG_OPTION]...
[( -a | --arguments ) OPTION_ARGUMENTS]
[( -f | --no-files )]
[( -r | --require-parameter )]
[( -x | --exclusive )]
[( -w | --wraps ) WRAPPED_COMMAND]...
[( -n | --condition ) CONDITION]
[( -d | --description ) DESCRIPTION]
complete ( -C[STRING] | --do-complete[=STRING] )
Описание
Для введения в детали указания автозаполнений, см. Создание собственных автозаполнений в руководстве fish.
-
COMMAND— имя команды, для которой нужно добавить автозаполнение. -
SHORT_OPTION— односимвольный параметр для команды. -
LONG_OPTION— многосимвольный параметр для команды. -
OPTION_ARGUMENTS— параметр, содержащий список возможных аргументов параметра, разделенных пробелами, которые могут содержать подстановки команд. -
DESCRIPTION— описание действия параметра и/или аргументов параметра. -
-c COMMANDили--command COMMANDуказывает, чтоCOMMAND— имя команды. -
-p COMMANDили--path COMMANDуказывает, чтоCOMMAND— абсолютный путь к программе (возможно, содержащий подстановки). -
-eили--eraseудаляет указанное автозаполнение. -
-s SHORT_OPTIONили--short-option=SHORT_OPTIONдобавляет короткий параметр в список автозаполнений. -
-l LONG_OPTIONили--long-option=LONG_OPTIONдобавляет параметр типа GNU long в список автозаполнений. -
-o LONG_OPTIONили--old-option=LONG_OPTIONдобавляет параметр типа old long в список автозаполнений (см. подробности ниже). -
-a OPTION_ARGUMENTSили--arguments=OPTION_ARGUMENTSдобавляет указанные аргументы параметра в список автозаполнений. -
-fили--no-filesуказывает, что параметры, указанные в этом автозаполнении, не должны следовать за именем файла. -
-rили--require-parameterуказывает, что параметры, указанные в этом автозаполнении, всегда должны иметь аргумент параметра, т.е. не могут следовать за другим параметром. -
-xили--exclusiveподразумевает как-r, так и-f. -
-w WRAPPED_COMMANDили--wraps=WRAPPED_COMMANDзаставляет указанную команду наследовать автозаполнения от обернутой команды (см. подробности ниже). -
-nили--conditionзадает командную оболочку, которая должна вернуть 0, если автозаполнение должно быть использовано. Это позволяет задать автозаполнения, которые должны использоваться только в некоторых случаях. -
-CSTRINGили--do-complete=STRINGзаставляет complete искать все возможные автозаполнения для указанной строки. -
-Cили--do-completeбез аргумента заставляет complete искать все возможные автозаполнения для текущего буфера командной строки. Если оболочка не в интерактивном режиме, возвращается ошибка. -
-Aи--authoritativeбольше ничего не делают и игнорируются. -
-uи--unauthoritativeбольше ничего не делают и игнорируются.
Автозаполнения, специфичные для команды, в fish основаны на понятии параметров и аргументов. Параметр — это параметр, который начинается с тире, например, '-h', '-help' или '--help'. Аргументы — это параметры, которые не начинаются с тире. Fish распознает три стиля параметров, те же, что и в версии GNU библиотеки getopt. Эти стили:
- Короткие параметры, например, '
-a'. Короткие параметры состоят из одной буквы, предваряются одним тире и могут быть объединены (например, '-la', что эквивалентно '-l -a'). Аргументы параметров могут быть указаны в следующем параметре ('-w 32') или путем добавления значения к параметру ('-w32'). - Параметры типа old long, например, '
-Wall'. Параметры типа old long могут состоять из нескольких символов, предваряются одним тире и не могут быть объединены. Аргументы параметров указываются в следующем параметре ('-ao null'). - Параметры типа GNU long, например, '
--colors'. Параметры типа GNU long могут состоять из нескольких символов, предваряются двумя тире и не могут быть объединены. Аргументы параметров могут быть указаны в следующем параметре ('--quoting-style shell') или путем добавления к параметру '=' и значения ('--quoting-style=shell'). Параметры типа GNU long могут быть сокращены до тех пор, пока сокращение не будет уникальным ('--h') эквивалентно '--help', если help — единственный параметр типа long, начинающийся с 'h').
Параметры для указания имени команды и пути к команде могут использоваться несколько раз для определения одних и тех же автозаполнений для нескольких команд.
Параметры для указания переключателей команд и обернутых команд могут использоваться несколько раз для определения нескольких автозаполнений для команды/команд в одном вызове.
Вызов complete несколько раз для одной и той же команды добавляет новые определения поверх любых существующих автозаполнений, определенных для команды.
Когда -a или --arguments указаны вместе с параметрами long, short или old long, указанные аргументы используются только в качестве автозаполнений при попытке заполнения аргумента для любого из указанных параметров. Если -a или --arguments указаны без каких-либо параметров long, short или old long, указанные аргументы используются при заполнении любого аргумента команды (за исключением заполнения аргумента параметра, указанного с помощью -r или --require-parameter).
Подстановки команд, найденные в OPTION_ARGUMENTS, не должны возвращать список аргументов, разделенных пробелами. Вместо этого они должны возвращать список аргументов, разделенных символом новой строки, и каждый аргумент может необязательно иметь символ табуляции, за которым следует описание аргумента. Любое описание, предоставленное таким образом, переопределяет описание, предоставленное с помощью -d или --description.
Параметры -w или --wraps заставляют указанную команду наследовать автозаполнения от другой команды. Команда, наследующая автозаполнения, называется «обернутой» наследуемой командой. У обернутой команды могут быть свои автозаполнения помимо унаследованных. Команда может обернуть несколько команд, а обертывание транзитивно: если A обертывает B, а B обертывает C, то A автоматически наследует все автозаполнения C. Обертывание можно удалить, используя параметры -e или --erase. Обратите внимание, что обертывание работает только для автозаполнений, указанных с помощью -c или --command, и игнорируется при указании автозаполнений с помощью -p или --path.
При удалении автозаполнений можно удалить все автозаполнения для определенной команды, указав complete -c COMMAND -e, или указав определенный параметр автозаполнения для удаления, указав параметр long, short или old long.
Пример
Короткий параметр -o для команды gcc требует, чтобы за ним следовал файл. Это можно сделать, написав:
complete -c gcc -s o -r
Короткий параметр -d для команды grep требует, чтобы одно из строк 'read', 'skip' или 'recurse' было использовано. Это можно указать, написав:
complete -c grep -s d -x -a "read skip recurse"
Команда rpm принимает любой имя пользователя в качестве аргумента. Имена пользователей задаются как первое поле, разделенное двоеточием, в файле /etc/passwd. Это можно указать как:
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
Команда rpm имеет несколько различных режимов. Если указан флаг -e или --erase, rpm должен удалить один или несколько пакетов, в этом случае несколько переключателей, связанных с удалением пакетов, будут действительны, например, переключатель nodeps.
Это можно записать как:
complete -c rpm -n "__fish_contains_opt -s e erase" -d nodeps "Don't check dependencies"
где __fish_contains_opt — функция, которая проверяет буфер командной строки на наличие указанного набора параметров.
Для реализации псевдонима используйте параметр -w или --wraps:
complete -c hub -w git
Теперь hub наследует все автозаполнения из git. Обратите внимание, что это также можно указать в объявлении функции.
Вернуться к списку команд.
contains - проверка наличия слова в списке
Краткое описание
contains [OPTIONS] KEY [VALUES...]
Описание
contains проверяет, содержит ли набор VALUES строку KEY. Если содержит, contains завершается с кодом 0; если нет, с кодом 1.
Доступны следующие параметры:
-
-iили--indexвывод индекса слова
Обратите внимание, что, как и в инструментах GNU, contains интерпретирует все аргументы, начинающиеся с -, как параметры contains, до тех пор, пока не достигнет аргумента, который является -- (два тире). См. примеры ниже.
Пример
for i in ~/bin /usr/local/bin
if not contains $i $PATH
set PATH $PATH $i
end
end
Вышеприведенный код проверяет, находятся ли ~/bin и /usr/local/bin в пути, и добавляет их, если нет.
function hasargs
if contains -- -q $argv
echo '$argv contains a -q option'
end
end
Вышеприведенный код проверяет наличие -q в списке аргументов, используя аргумент -- для разграничения параметров для contains от ключа для поиска.
Вернуться к списку команд.
continue - пропуск оставшейся части текущей итерации текущего внутреннего цикла
Краткое описание
LOOP_CONSTRUCT; [COMMANDS...;] continue; [COMMANDS...;] end
Описание
continue пропускает оставшуюся часть текущей итерации текущего внутреннего цикла, такого как цикл for или цикл while. Обычно он добавляется внутри блока условного оператора, такого как оператор if или switch.
Пример
Следующий код удаляет все временные файлы, не содержащие слово smurf.
for i in *.tmp
if grep smurf $i
continue
end
rm $i
end
Вернуться к списку команд.
count - подсчет количества элементов массива
Краткое описание
count $VARIABLE
Описание
count выводит количество аргументов, переданных ему. Обычно это используется для определения количества элементов массива переменной окружения.
count не принимает никаких параметров, включая -h или --help.
count завершается с ненулевым кодом выхода, если не было передано никаких аргументов, и с нулевым, если было передано хотя бы один аргумент.
Пример
count $PATH # Returns the number of directories in the users PATH variable. count *.txt # Returns the number of files in the current working directory ending with the suffix '.txt'.
Вернуться к списку команд.
dirh - вывод истории каталогов
Синтаксис
dirh
Описание
dirh выводит текущую историю каталогов. Текущее положение в истории выделяется цветом, заданным переменной окружения fish_color_history_current.
dirh не принимает никаких параметров.
Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещенными каталогами. История хранится в переменных $dirprev и $dirnext.
Вернуться к списку команд.
dirs - вывод стека каталогов
Синтаксис
dirs dirs -c
Описание
dirs выводит текущий стек каталогов, созданный командой pushd.
С опцией "-c" очищает стек каталогов.
dirs не принимает никаких параметров.
Вернуться к списку команд.
disown - удаление процесса из списка задач
Синтаксис
disown [ PID ... ]
Описание
disown удаляет указанную задачу из списка задач. Сама задача продолжает существовать, но fish больше не отслеживает ее.
Задачи в списке задач получают сигнал hang-up при завершении fish, что обычно приводит к завершению задачи; disown позволяет этим процессам продолжить работу независимо.
Если процесс не указан, удаляется последняя использованная задача (как bg и fg). Если указаны один или несколько PID, задачи с указанными идентификаторами процессов удаляются из списка задач. Некорректные задачи игнорируются, и выводится предупреждение.
Если задача приостановлена, ей отправляется сигнал на продолжение работы, и выводится предупреждение. После того, как задача была удалена с помощью disown, использовать встроенную команду bg для продолжения работы задачи невозможно.
Идентификатор процесса (PID) желаемого процесса обычно находится с помощью расширения процесса расширения процесса, которое может указывать задачи или искать по имени процесса.
disown возвращает 0, если все указанные задачи были успешно удалены, и 1, если возникли какие-либо проблемы.
Пример
firefox &; disown запустит веб-браузер Firefox в фоновом режиме и удалит его из списка задач, что означает, что он не будет закрыт при закрытии процесса fish.
disown (jobs -p) удаляет все задачи из списка задач без их завершения.
Вернуться к списку команд.
echo - вывод строки текста
Синтаксис
echo [OPTIONS] [STRING]
Описание
echo выводит строку текста.
Доступны следующие опции:
-
-n, Не выводить перевод строки -
-s, Не разделять аргументы пробелами -
-E, Отключить интерпретацию обратных слэшей (по умолчанию) -
-e, Включить интерпретацию обратных слэшей
Последовательности escape
Если используется -e, распознаются следующие последовательности:
-
\обратный слэш -
\aсигнал тревоги (BEL) -
\bвозврат на одну позицию -
\cбольше не выводить -
\eescape -
\fподача формы -
\nновая строка -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\0NNNбайт с восьмеричным значением NNN (1-3 цифры) -
\xHHбайт с шестнадцатеричным значением HH (1-2 цифры)
Пример
echo 'Hello World'
Вывод hello world в стандартный вывод
echo -e 'Top\nBottom'
Вывод Top и Bottom на отдельных строках, используя последовательность escape
Вернуться к списку команд.
else - выполнение команды, если условие не выполнено
Синтаксис
if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end
Описание
if выполнит команду CONDITION. Если код выхода условия равен 0, будут выполнены команды COMMANDS_TRUE. Если код не равен 0 и указан else, будет выполнено COMMANDS_FALSE.
Пример
Следующий код проверяет, существует ли файл foo.txt как обычный файл.
if test -f foo.txt
echo foo.txt exists
else
echo foo.txt does not exist
end
Вернуться к списку команд.
emit - Вызвать общее событие
Синтаксис
emit EVENT_NAME [ARGUMENTS...]
Описание
emit вызывает или срабатывает событие. События передаются или ловятся специальными функциями, называемыми обработчиками событий. Аргументы передаются обработчикам событий в качестве аргументов функции.
Пример
Следующий код сначала определяет обработчик событий для общего события с именем 'test_event', а затем вызывает событие этого типа.
function event_test --on-event test_event
echo event test: $argv
end
emit test_event something
\subsection emit-notes Notes
Note that events are only sent to the current fish process as there is no way to send events from one fish process to another.
Вернуться к списку команд.
end - завершение блока команд.
Синтаксис
begin; [COMMANDS...] end if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end while CONDITION; COMMANDS...; end for VARNAME in [VALUES...]; COMMANDS...; end switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
Описание
end завершает блок команд.
Для получения дополнительной информации ознакомьтесь с документацией по блокам команд, таким как if, for и while.
Команда end не изменяет текущий код выхода. Вместо этого, код выхода после неё будет кодом выхода последней выполненной команды.
Вернуться к списку команд.
eval - вычисление указанных команд
Синтаксис
eval [COMMANDS...]
Описание
eval вычисляет указанные параметры как команду. Если указано более одного параметра, все параметры будут объединены с помощью пробела в качестве разделителя.
Пример
Следующий код вызовет команду ls. Обратите внимание, что fish не поддерживает использование переменных оболочки как прямых команд; eval может быть использовано для решения этой проблемы.
set cmd ls eval $cmd
Вернуться к списку команд.
exec - выполнение команды в текущем процессе
Синтаксис
exec COMMAND [OPTIONS...]
Описание
exec заменяет текущую оболочку новой командой. При успешном завершении exec никогда не возвращается. exec не может быть использован внутри конвейера.
Пример
exec emacs запускает текстовый редактор emacs и завершает fish. Когда emacs завершит работу, сессия завершится.
Вернуться к списку команд.
exit - выход из оболочки
Синтаксис
exit [STATUS]
Описание
exit вызывает выход fish. Если STATUS задан, он будет преобразован в целое число и использован в качестве кода выхода. В противном случае код выхода будет кодом выхода последней выполненной команды.
Если exit вызывается во время подстановки файла (с помощью встроенной команды source), остальная часть файла будет пропущена, но сама оболочка не выйдет.
Вернуться к списку команд.
false - возвращение неуспешного результата
Синтаксис
false
Описание
false устанавливает код выхода в 1.
Вернуться к списку команд.
fg - вывод задачи в переднем плане
Синтаксис
fg [PID]
Описание
fg выводит указанную задачу в переднем плане, возобновляя её, если она приостановлена. Пока выполняется задача в переднем плане, fish приостанавливается. Если задача не указана, последняя использованная задача выводится в переднем плане. Если указан PID, задача с указанным идентификатором группы выводится в переднем плане.
Идентификатор процесса (PID) желаемого процесса обычно находится с помощью расширения процесса. Fish может расширять гораздо больше, чем просто числовой PID, включая ссылку на себя и поиск PID по имени.
Пример
fg %1 выведет задачу с идентификатором 1 в переднем плане.
Вернуться к списку команд.
fish - дружелюбная интерактивная оболочка
Синтаксис
fish [OPTIONS] [-c command] [FILE [ARGUMENTS...]]
Описание
fish — командная оболочка, разработанная в основном с упором на интерактивное использование. Полное руководство доступно в формате HTML, используя команду help внутри fish.
Доступны следующие опции:
-
-cили--command=COMMANDSвычисляют указанные команды вместо чтения из командной строки -
-Cили--init-command=COMMANDSвычисляют указанные команды после прочтения конфигурации, до запуска команды, указанной-c, или чтения интерактивного ввода -
-dили--debug-level=DEBUG_LEVELзадают уровень подробности fish. Большее число означает более высокую подробность. По умолчанию уровень равен 1. -
-iили--interactiveзадают режим интерактивного использования fish -
-lили--loginзадают fish как оболочку входа в систему -
-nили--no-executeне выполняют никаких команд, а только выполняют проверку синтаксиса -
-pили--profile=PROFILE_FILEпри завершении fish, выводить информацию о времени выполнения всех выполненных команд в указанный файл -
-vили--versionотобразить версию и выйти -
-Dили--debug-stack-frames=DEBUG_LEVELзадать количество кадров стека для отображения при записи сообщений отладки. По умолчанию значение равно нулю. Значение 3 или 4 обычно достаточно, чтобы получить представление о том, как был достигнут вызов отладки, но вы можете указать значение до 128.
Статус завершения работы fish, как правило, является статусом завершения последней команды в фоновом режиме. Если fish завершается из-за ошибки синтаксического анализа, статус завершения — 127.
Назад к списку команд.
fish_breakpoint_prompt — определение внешнего вида строки приглашения при использовании команды `breakpoint`
Сводка
function fish_breakpoint_prompt
...
end
Описание
Определяя функцию fish_breakpoint_prompt, пользователь может выбрать настраиваемое приглашение при запросе ввода в ответ на команду breakpoint. Функция fish_breakpoint_prompt выполняется при отображении приглашения, а вывод используется в качестве приглашения.
Статус завершения команд в пределах fish_breakpoint_prompt не изменяет значение $status вне функции fish_breakpoint_prompt.
fish поставляется с предустановленной версией этой функции, которая отображает имя функции и номер строки текущего контекста выполнения.
Пример
Простой приглашающий текст, упрощенная версия стандартного приглашения отладки:
function fish_breakpoint_prompt -d "Write out the debug prompt"
set -l function (status current-function)
set -l line (status current-line-number)
set -l prompt "$function:$line >"
echo -ns (set_color $fish_color_status) \ (set_color normal)
end
Назад к списку команд.
fish_config — запуск веб-интерфейса настройки
Описание
fish_config запускает веб-интерфейс настройки.
Веб-интерфейс позволяет просматривать функции, переменные и историю, а также вносить изменения в настройки приглашения и цвета.
fish_config запускает локальный веб-сервер и открывает окно веб-браузера; по завершении работы закройте окно браузера, а затем нажмите клавишу Enter для завершения сеанса настройки.
fish_config необязательно принимает имя начальной вкладки настроек. Например, fish_config history запустит интерфейс настройки с вкладкой истории.
Если переменная окружения BROWSER задана, она будет использоваться в качестве имени веб-браузера для открытия вместо системного по умолчанию.
Пример
fish_config открывает новое окно веб-браузера и позволяет настроить определённые параметры fish.
Назад к списку команд.
fish_indent — инструмент форматирования и отступа
Сводка
fish_indent [OPTIONS]
Описание
fish_indent используется для форматирования отступов кода fish. fish_indent считывает команды со стандартного ввода и выводит их на стандартный вывод или в указанный файл.
Доступны следующие параметры:
-
-wили--writeформатируют отступы указанного файла и сразу же записывают их в этот файл. -
-iили--no-indentне форматируют отступы команд; только переформатируют, помещая по одной команде на строку. -
-vили--versionотображает текущую версию fish и завершает работу. -
--ansiиспользует ANSI-последовательности для раскрашивания вывода, соответствующие текущему значению $TERM, используя цвета, определённые в среде (например,$fish_color_command). -
--htmlвыводит HTML, который поддерживает подсветку синтаксиса, если определён соответствующий CSS. Имена классов CSS совпадают с именами переменных, например,fish_color_command. -
-dили--debug-level=DEBUG_LEVELвключает отладочный вывод и задаёт уровень детализации (например,fish -d). По умолчанию 0. -
-Dили--debug-stack-frames=DEBUG_LEVELопределяют, сколько кадров стека отображать при записи отладочных сообщений. Значение по умолчанию — ноль. Значение 3 или 4 обычно достаточно для понимания того, как был достигнут данный отладочный вызов, но можно задать значение до 128. -
--dump-parse-treeвыводит информацию о проанализированных операторах в stderr. Вероятно, это будет интересно только тем, кто работает с исходным кодом fish.
Назад к списку команд.
fish_key_reader — изучение символов, отправляемых клавишами клавиатуры
Сводка
fish_key_reader [OPTIONS]
Описание
fish_key_reader используется для изучения ввода, полученного от терминала, и может помочь с настройкой клавиш. Программа интерактивна и работает со стандартным вводом. Отображаются отдельные символы и их шестнадцатеричные значения.
Программа запишет пример команды bind, соответствующей захваченной последовательности символов, в stdout. Если последовательность символов соответствует имени специальной клавиши (см. bind --key-names), будут показаны использование как bind CHARS ..., так и bind -k KEYNAME .... Дополнительные сведения о полученных символах, такие как задержка между символами, записываются в stderr.
Доступны следующие параметры:
-
-cили--continuousзапускают сеанс, в котором можно просмотреть несколько последовательностей нажатий клавиш. По умолчанию программа завершается после захвата одной последовательности. -
-dили--debug-level=DEBUG_LEVELвключает отладочный вывод и задаёт уровень детализации (например,fish -d). По умолчанию 0. -
-Dили--debug-stack-frames=DEBUG_LEVELопределяют, сколько кадров стека отображать при записи отладочных сообщений. Значение по умолчанию — ноль. Значение 3 или 4 обычно достаточно для понимания того, как был достигнут данный отладочный вызов, но можно задать значение до 128. -
-hили--helpвыводит информацию об использовании. -
-vили--versionвыводит версию fish_key_reader и завершает работу.
Примечания к использованию
Задержка в миллисекундах с момента получения предыдущего символа включена в диагностическую информацию, записываемую в stderr. Эта информация может быть полезна для определения оптимального параметра fish_escape_delay_ms или изучения задержки, вносимой инструментами, такими как ssh, mosh или tmux.
fish_key_reader намеренно отключает обработку многих сигналов. Для завершения fish_key_reader в режиме --continuous выполните:
- дважды нажмите
Ctrl-C, или - дважды нажмите
Ctrl-D, или - введите
exit, или - введите
quit
Назад к списку команд.
fish_mode_prompt — определение внешнего вида индикатора режима
Сводка
Функция fish_mode_prompt выведет индикатор режима для использования в режиме vi.
Описание
Стандартная функция fish_mode_prompt выведет индикаторы текущего режима редактора Vi, отображённые слева от обычного приглашения. Определите собственную функцию для настройки внешнего вида индикатора режима. Вы также можете определить пустую функцию fish_mode_prompt для удаления индикаторов режима Vi. Функция $fish_bind_mode variable может быть использована для определения текущего режима. Он будет одним из default, insert, replace_one, или visual.
Пример
function fish_mode_prompt
switch $fish_bind_mode
case default
set_color --bold red
echo 'N'
case insert
set_color --bold green
echo 'I'
case replace_one
set_color --bold green
echo 'R'
case visual
set_color --bold brmagenta
echo 'V'
case '*'
set_color --bold red
echo '?'
end
set_color normal
end
Вывод нескольких строк не поддерживается в fish_mode_prompt.
Назад к списку команд.
fish_opt — создание спецификации опции для команды argparse
Сводка
fish_opt [ -h | --help ]
fish_opt ( -s X | --short=X ) [ -l LONG | --long=LONG ] [ --long-only ] \
[ -o | --optional-val ] [ -r | --required-val ] [ --multiple-vals ]
Описание
Эта команда предоставляет способ создания спецификаций опций, подходящих для использования с командой argparse. Конечно, вы можете написать спецификации опций вручную без использования этой команды. Но вы можете предпочесть использовать её для большей ясности.
Доступны следующие параметры argparse:
-
-sили--shortпринимает одиночную букву, используемую в качестве короткого флага в определяемой опции. Этот параметр обязателен. -
-lили--longпринимает строку, используемую в качестве длинного флага в определяемой опции. Этот параметр необязателен и не имеет значения по умолчанию. Если длинный флаг не определён, при обработке аргументов с использованием спецификации опции будет разрешён только короткий флаг. -
--long-onlyозначает, что определяемая спецификация опции будет допускать использование только имени длинного флага. Короткое имя флага всё ещё должно быть определено (т. е.,--shortдолжно быть указано), но оно не может быть использовано при обработке аргументов с использованием этой спецификации опции. -
-oили--optionalозначает, что определяемая опция может принимать значение, но оно является необязательным, а не обязательным. Если опция встречается более одного раза при обработке аргументов, сохраняется только последнее увиденное значение. Это означает, что созданная переменной флагаargparseбудет содержать нулевые элементы, если значение с опцией не было задано, в противном случае она будет содержать ровно один элемент. -
-rили--requiredозначает, что определяемая опция требует значения. Если опция встречается более одного раза при обработке аргументов, сохраняется только последнее увиденное значение. Это означает, что созданная переменной флагаargparseбудет содержать ровно один элемент. -
--multiple-valsозначает, что определяемая опция требует значения каждый раз, когда она встречается. Каждый экземпляр сохраняется. Это означает, что созданная переменной флагаargparseбудет содержать по одному элементу для каждого экземпляра этой опции в аргументах. -
-hили--helpвыводит справку по использованию этой команды.
Примеры
Определение одной спецификации опции для флага помощи boolean:
set -l options (fish_opt -s h -l help) argparse $options -- $argv
То же самое, но со вторым флагом, который требует значения:
set -l options (fish_opt -s h -l help) set options $options (fish_opt -s m -l max --required-val) argparse $options -- $argv
То же самое, но с третьим флагом, который может задаваться многократно, сохраняя значение каждого увиденного экземпляра и используя только длинное имя флага (--token):
set -l options (fish_opt --short=h --long=help) set options $options (fish_opt --short=m --long=max --required-val) set options $options (fish_opt --short=t --long=token --multiple-vals --long-only) argparse $options -- $argv
Назад к списку команд.
fish_prompt — определение внешнего вида строки приглашения
Сводка
function fish_prompt
...
end
Описание
Определяя функцию fish_prompt, пользователь может выбрать настраиваемое приглашение. Функция fish_prompt выполняется при отображении приглашения, а вывод используется в качестве приглашения.
Статус завершения команд в пределах fish_prompt не изменяет значение $status вне функции fish_prompt.
fish поставляется с несколькими примерами приглашений, которые можно выбрать с помощью команды fish_config.
Пример
Простой приглашающий текст:
function fish_prompt -d "Write out the prompt"
printf '%s@%s%s%s%s> ' (whoami) (hostname | cut -d . -f 1) \
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
end
Назад к списку команд.
fish_right_prompt - определение внешнего вида командной строки справа
Синтаксис
function fish_right_prompt
...
end
Описание
fish_right_prompt похож на fish_prompt, за исключением того, что он отображается справа от окна терминала.
В fish_right_prompt не поддерживаются несколько строк.
Пример
Простой правый приглашающий знак:
function fish_right_prompt -d "Write out the right prompt"
date '+%m/%d/%y'
end
Назад к списку команд.
fish_update_completions - обновление дополнений с помощью руководств
Описание
fish_update_completions анализирует руководства, установленные на системе, и пытается создать файлы дополнений в каталоге конфигурации fish.
Это не перезаписывает пользовательские дополнения.
Для fish_update_completions нет параметров.
Назад к списку команд.
fish_vi_mode - включение режима vi
Синтаксис
fish_vi_mode
Описание
Эта функция устарела. Пожалуйста, вызовите fish_vi_key_bindings directly
fish_vi_mode переходит в режим редактирования команд, похожий на vi. Чтобы всегда начинать в режиме vi, добавьте fish_vi_mode в свой файл config.fish.
Назад к списку команд.
for - выполнение набора команд несколько раз.
Синтаксис
for VARNAME in [VALUES...]; COMMANDS...; end
Описание
for — это конструкция цикла. Она будет выполнять команды, указанные в COMMANDS, несколько раз. На каждой итерации локальная переменная, указанная в VARNAME, получает новое значение из VALUES. Если VALUES пусто, то COMMANDS не будет выполняться вообще.
Пример
for i in foo bar baz; echo $i; end # would output: foo bar baz
Назад к списку команд.
funced - редактирование функции интерактивно
Синтаксис
funced [OPTIONS] NAME
Описание
funced предоставляет интерфейс для редактирования определения функции NAME.
Если переменная среды $VISUAL установлена, она будет использоваться в качестве программы для редактирования функции. Если $VISUAL не установлена, но установлена $EDITOR, она будет использоваться. В противном случае будет использован встроенный редактор. Обратите внимание, что для ввода символа новой строки с помощью встроенного редактора необходимо нажать Alt-Enter. Нажатие Enter означает, что вы закончили редактирование функции. Это не относится к внешним редакторам, таким как emacs или vim.
Если функции с именем NAME нет, будет создана новая функция с указанным именем.
-
-e commandили--editor commandОткройте тело функции внутри текстового редактора, заданного командой (например,-e vi). Специальная командаfishбудет использовать встроенный редактор (то же самое, что и при указании-i). -
-iили--interactiveВынужденно открыть тело функции в встроенном редакторе, даже если$VISUALили$EDITORопределены.
Назад к списку команд.
funcsave - сохранение определения функции в каталоге автозагрузки пользователя
Синтаксис
funcsave FUNCTION_NAME
Описание
funcsave сохраняет текущее определение функции в файл в каталоге конфигурации fish. Эта функция будет автоматически загружаться в текущих и будущих сессиях fish. Это может быть полезно, если вы интерактивно создали новую функцию и хотите сохранить её для последующего использования.
Обратите внимание, что, поскольку fish загружает функции по требованию, сохранённые функции не будут работать как обработчики событий, пока они не будут выполнены или не будут обработаны иным образом. Чтобы активировать обработчик событий для каждого нового оболочки, добавьте функцию в свой файл инициализации оболочки файл инициализации оболочки вместо использования funcsave.
Назад к списку команд.
function - создание функции
Синтаксис
function NAME [OPTIONS]; BODY; end
Описание
function создает новую функцию NAME с телом BODY.
Функция — это список команд, которые будут выполнены при вводе имени функции в качестве команды.
Доступны следующие параметры:
-
-a NAMESили--argument-names NAMESприсваивает значения последовательных аргументов командной строки именам, указанным в NAMES. -
-d DESCRIPTIONили--description=DESCRIPTIONописывает действие функции, подходящее в качестве описания дополнения. -
-w WRAPPED_COMMANDили--wraps=WRAPPED_COMMANDзаставляет функцию унаследовать дополнения от заданной обернутой команды. См. документацию поcompleteдля получения дополнительной информации. -
-eили--on-event EVENT_NAMEзаставляет fish запускать эту функцию при генерации указанного именованного события. Fish внутренне генерирует именованные события, например, при отображении приглашения. -
-vили--on-variable VARIABLE_NAMEзаставляет fish запускать эту функцию при изменении значения переменной VARIABLE_NAME. -
-j PGIDили--on-job-exit PGIDзаставляет fish запускать эту функцию при завершении задания с идентификатором группы PGID. Вместо PGID можно указать строку 'caller'. Это допустимо только в подстановке команды и приведёт к тому, что обработчик будет запущен при завершении задания, которое создало эту подстановку команды. -
-p PIDили--on-process-exit PIDзаставляет fish запускать эту функцию при завершении дочернего процесса fish с идентификатором процесса PID. -
-sили--on-signal SIGSPECзаставляет fish запускать эту функцию при получении сигнала SIGSPEC. SIGSPEC может быть номером сигнала или именем сигнала, таким как SIGHUP (или просто HUP). -
-Sили--no-scope-shadowingпозволяет функции получать доступ к переменным вызывающих функций. Обычно любые переменные внутри функции, имеющие то же имя, что и переменные из вызывающей функции, «затеняются», и их содержимое независимо от вызывающей функции. -
-Vили--inherit-variable NAMEсоздает моментальное изображение значения переменнойNAMEи определяет локальную переменную с тем же именем и значением при определении функции. Это похоже на замыкания в других языках, таких как Python, но немного отличается. Обратите внимание на слово «моментальное изображение» в первом предложении. Если вы измените значение переменной после определения функции, даже если вы сделаете это в том же контексте (обычно в другой функции), новое значение не будет использовано функцией, которую вы только что создали с помощью этого параметра. См. примерfunction notifyниже, чтобы понять, как это можно использовать.
Если пользователь введёт дополнительные аргументы после функции, они будут вставлены в массив переменных переменных массивов $argv. Если предоставлен параметр --argument-names, аргументы также будут присвоены именам, указанным в этом параметре.
Используя один из переключателей обработчика событий, функцию можно сделать автоматически выполняемой при определённых событиях. Пользователь может генерировать новые события с помощью встроенной команды emit. Fish генерирует следующие именованные события:
-
fish_prompt, которое генерируется всякий раз, когда отображается новое приглашение fish. -
fish_command_not_found, которое генерируется всякий раз, когда поиск команды завершился неудачей. -
fish_preexec, которое генерируется непосредственно перед выполнением интерактивной команды. Командная строка передаётся в качестве первого параметра.Примечание: Это событие будет сгенерировано даже в случае некорректной команды. Параметр командной строки содержит всю командную строку дословно и может потенциально содержать новые строки.
-
fish_postexec, которое генерируется непосредственно после выполнения интерактивной команды. Командная строка передаётся в качестве первого параметра.Примечание: Это событие будет сгенерировано даже в случае некорректной команды. Параметр командной строки содержит всю командную строку дословно и может потенциально содержать новые строки.
Пример
function ll
ls -l $argv
end
выполнит команду ls, используя параметр -l, при этом передавая любые дополнительные файлы и переключатели команде ls.
function mkdir -d "Create a directory and set CWD"
command mkdir $argv
if test $status = 0
switch $argv[(count $argv)]
case '-*'
case '*'
cd $argv[(count $argv)]
return
end
end
end
Это выполнит команду mkdir и, если она выполнится успешно, изменит текущий рабочий каталог на только что созданный.
function notify
set -l job (jobs -l -g)
or begin; echo "There are no jobs" >&2; return 1; end
function _notify_job_$job --on-job-exit $job --inherit-variable job
echo -n \a ## beep
functions -e _notify_job_$job
end
end
Это подаст звуковой сигнал при завершении последнего задания.
Примечания
Обратите внимание, что события принимаются только от текущего процесса fish, так как нет способа отправлять события из одного процесса fish в другой.
Назад к списку команд.
functions - вывод или удаление функций
Синтаксис
functions [ -a | --all ] [ -n | --names ] functions [ -D | --details ] [ -v ] FUNCTION functions -c OLDNAME NEWNAME functions -d DESCRIPTION FUNCTION functions [ -e | -q ] FUNCTIONS...
Описание
functions выводит или удаляет функции.
Доступны следующие параметры:
-
-aили--allотображает все функции, даже те, имена которых начинаются с символа подчёркивания. -
-c OLDNAME NEWNAMEили--copy OLDNAME NEWNAMEсоздаёт новую функцию с именем NEWNAME, используя определение функции OLDNAME. -
-d DESCRIPTIONили--description=DESCRIPTIONизменяет описание этой функции. -
-eили--eraseприводит к удалению указанных функций. -
-Dили--detailsсообщает путь к каждому определению функции или пути, где она может быть загружена автоматически,stdinесли функция была определена интерактивно или в командной строке или с помощью stdin, иn/aесли функция недоступна. Если также указан параметр--verbose, выводятся пять строк:- путь, как описано выше,
-
autoloaded,not-autoloadedилиn/a, - номер строки в файле или ноль, если не применимо,
-
scope-shadowingесли функция затеняет переменные вызывающей функции (обычный случай, если она не была определена с--no-scope-shadowing), иначеno-scope-shadowing, илиn/aесли функция не определена, - описание функции, минимально экранированное, так чтобы оно занимало одну строку, или
n/aесли функция не определена.
Не следует предполагать, что будет написано только пять строк, так как в будущем мы можем добавить дополнительную информацию в вывод.
-
-nили--namesперечисляет имена всех определённых функций. -
-qили--queryпроверяет, существуют ли указанные функции. -
-vили--verboseсделают некоторые выводы более подробными.
По умолчанию functions, если вызывается без аргументов, печатает имена всех определённых функций. Если опция -a не задана, функции, начинающиеся с нижнего подчёркивания, не включаются в вывод.
Если заданы какие-либо параметры, не являющиеся опциями, выводятся определения указанных функций.
Автоматически загруженные функции не могут быть удалены с помощью functions -e. Для удаления автоматически загруженных функций необходимо удалить файл определения или изменить переменную $fish_function_path.
Копирование функции с помощью -c копирует только тело функции и не подключает никакие уведомления об событиях от исходной функции.
В одном вызове functions -d можно изменить описание только одной функции.
Код возврата functions — это количество функций, указанных в списке аргументов, которые не существуют. Этот код возврата можно использовать совместно с опцией -q.
Примеры
functions -n # Displays a list of currently-defined functions functions -c foo bar # Copies the 'foo' function to a new function called 'bar' functions -e bar # Erases the function `bar`
Назад к списку команд.
help - выводит документацию fish
Синтаксис
help [SECTION]
Описание
help выводит справочную документацию fish.
Если указана команда, то показывается справка по этой команде.
Если переменная среды BROWSER установлена, она будет использована для отображения документации. В противном случае fish будет искать подходящий браузер.
Если вы предпочитаете использовать другой браузер (кроме описанного выше) для справки fish, вы можете установить переменную fish_help_browser. Эта переменная может быть установлена как массив, где первый элемент — команда браузера, а остальные — параметры браузера.
Обратите внимание, что большинство встроенных команд отображают свою справку в терминале, если задана опция --help.
Пример
help fg показывает документацию для встроенной команды fg.
Назад к списку команд.
history - показ и управление историей команд
Синтаксис
history search [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] [ --max=n ] [ --null ] [ "search string"... ] history delete [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] "search string"... history merge history save history clear history ( -h | --help )
Описание
history используется для поиска, удаления и иного управления историей интерактивных команд.
Доступны следующие операции (подкоманды):
-
searchвозвращает элементы истории, соответствующие строке поиска. Если строка поиска не указана, возвращает все элементы истории. Это основная операция, если не указана другая операция. Вы должны явно указатьhistory search, если хотите выполнить поиск по одной из подкоманд. Опция поиска--containsбудет использоваться, если вы не укажете другую опцию поиска. Записи упорядочены от новых к старым. Если вывод подключён к tty, функция history будет передавать вывод через ваш pager. Функция history просто записывает результаты в стандартный вывод. -
deleteудаляет элементы истории. Без опций--prefixили--contains, удаляется точное совпадение указанного текста. Если вы не указываете--exact, будет отображено сообщение, спрашивающее, какие записи нужно удалить. Вы можете ввести слово «all», чтобы удалить все совпадающие записи. Вы можете ввести единственный идентификатор (число в квадратных скобках), чтобы удалить только эту запись. Вы можете ввести несколько идентификаторов, разделенных пробелом, чтобы удалить несколько записей. Просто нажмите [enter], чтобы ничего не удалять. Обратите внимание, что интерактивное поведение удаления — это функция history, а функция history поддерживает только удаление--exact --case-sensitive. -
mergeнемедленно применяет изменения истории из других сессий. Обычноfishигнорирует изменения истории из сессий, начатых после текущей. Эта команда немедленно применяет эти изменения. -
saveнемедленно записывает все изменения в файл истории. Оболочка автоматически сохраняет файл истории; эта опция предназначена для внутреннего использования и обычно не должна использоваться пользователем. -
clearочищает файл истории. Перед удалением истории отображается сообщение, спрашивающее о подтверждении, если не используетсяbuiltin history.
Доступны следующие параметры:
Эти флаги могут появляться до или сразу после одной из подкоманд, перечисленных выше.
-
-Cили--case-sensitiveвыполняет поиск с учётом регистра. По умолчанию поиск регистронезависимый. Обратите внимание, что до fish 2.4.0 по умолчанию был регистрозависимый поиск. -
-cили--containsищет или удаляет элементы истории, содержащие указанную строку текста. Это значение по умолчанию для флага--search. В настоящее время это не поддерживается флагом--delete. -
-eили--exactищет или удаляет элементы истории, которые точно совпадают с указанной строкой текста. Это значение по умолчанию для флага--delete. Обратите внимание, что по умолчанию поиск регистронезависимый. Если вам действительно нужен точный совпадение, включая регистр букв, вы должны использовать флаги-Cили--case-sensitive. -
-pили--prefixищет или удаляет элементы истории, начинающиеся с указанной строки текста. В настоящее время это не поддерживается флагом--delete. -
-tили--show-timeдобавляет к каждой записи истории дату и время записи. По умолчанию используется формат strftime# cn. Можно указать другой формат, например, `–show-time='Y-m-d H:M:S 'or–show-time='aIp'. The short option,-tdoesn't accept a stftime format string; it only uses the default format. Any strftime format is allowed, includingsto get the raw UNIX seconds since the epoch. Note that–with-time` также разрешен, но устарел и будет удален в будущей версии. -
-zили--nullприводит к тому, что записи истории, созданные операциями поиска, завершаются символом NUL, а не новой строкой. Это позволяет обрабатывать вывод функциейread -zдля корректной обработки многострочных записей истории. -
-<number>-n <number>или--max=<number>ограничивает сопоставленные элементы истории первыми «n» совпадающими элементами. Это верно только дляhistory search. -
-hили--helpвыводит справку по этой команде.
Пример
history clear # Deletes all history items history search --contains "foo" # Outputs a list of all previous commands containing the string "foo". history delete --prefix "foo" # Interactively deletes commands which start with "foo" from the history. # You can select more than one entry by entering their IDs seperated by a space.
Настройка имени файла истории
По умолчанию интерактивные команды регистрируются в файле $XDG_DATA_HOME/fish/fish_history (как правило, ~/.local/share/fish/fish_history).
Вы можете установить переменную fish_history на другое имя для текущей сессии оболочки. Значение по умолчанию (когда переменная не установлена) — fish, что соответствует $XDG_DATA_HOME/fish/fish_history. Если вы установите его, например, на fun, история будет записываться в $XDG_DATA_HOME/fish/fun_history. Пустая строка означает, что история вообще не будет сохраняться. Это похоже на функции частной сессии в веб-браузерах.
Вы можете изменить fish_history в любое время (используя set -x fish_history "session_name"), и это изменение применится немедленно. Если вы установите его в "default", будет использоваться имя сессии по умолчанию (которое является "fish").
Другие оболочки, такие как bash и zsh, используют переменную HISTFILE для аналогичных целей. Fish использует другое имя, чтобы избежать конфликтов и указать, что поведение отличается (имя сессии вместо пути к файлу). Кроме того, если вы установите переменную на значение, отличное от fish или default, импорт истории bash будет заблокирован. Это связано с тем, что наиболее распространённым случаем использования этой функции является предотвращение утечки личной или конфиденциальной истории при проведении презентации.
Примечания
Если вы укажете и --prefix, и --contains, будет использоваться последний флаг.
Обратите внимание, что для обеспечения обратной совместимости каждая подкоманда может быть также указана как длинный параметр. Например, вместо history search вы можете набрать COMMANDS_FALSE. Такие длинные параметры устарели и будут удалены в будущей версии.
Назад к списку команд.
if - условное выполнение команды
Синтаксис
if CONDITION; COMMANDS_TRUE...; [else if CONDITION2; COMMANDS_TRUE2...;] [else; COMMANDS_FALSE...;] end
Описание
if выполнит команду CONDITION. Если код возврата условия равен 0, будут выполнены команды COMMANDS_TRUE. Если код возврата не равен 0 и указан else, будет выполнена команда COMMANDS_FALSE.
Вы можете использовать and или or в условии. См. второй пример ниже.
Код возврата последней выполненной команды всегда доступен через переменную $status.
Пример
Следующий код выведет foo.txt exists , если файл foo.txt существует и является обычным файлом, иначе он выведет bar.txt exists , если файл bar.txt существует и является обычным файлом, иначе он выведет foo.txt and bar.txt do not exist.
if test -f foo.txt
echo foo.txt exists
else if test -f bar.txt
echo bar.txt exists
else
echo foo.txt and bar.txt do not exist
end
Следующий код выведет «foo.txt существует и доступен для чтения», если foo.txt является обычным файлом и доступен для чтения.
if test -f foo.txt and test -r foo.txt echo "foo.txt exists and is readable" end
Назад к списку команд.
isatty - проверка, является ли дескриптор файла терминалом.
Синтаксис
isatty [FILE DESCRIPTOR]
Описание
isatty проверяет, является ли дескриптор файла терминалом.
FILE DESCRIPTOR может быть либо номером дескриптора файла, либо одной из строк stdin, stdout, или stderr.
Если указанный дескриптор файла является терминалом, код возврата команды равен нулю. В противном случае код возврата — ненулевое значение. Сообщения не выводятся в стандартную ошибку.
Примеры
В интерактивной оболочке команды ниже завершаются с кодом возврата 0:
isatty isatty stdout isatty 2 echo | isatty 1
А эти завершатся ненулевым кодом возврата:
echo | isatty isatty 9 isatty stdout > file isatty 2 2> file
Назад к списку команд.
jobs - вывод текущих задач
Синтаксис
jobs [OPTIONS] [PID]
Описание
jobs выводит список текущих задач и их состояние.
Команда jobs принимает следующие переключатели:
-
-cили--commandвыводит имя команды для каждого процесса в заданиях. -
-gили--groupвыводит только идентификатор группы каждого задания. -
-lили--lastвыводит только последнее начатое задание. -
-pили--pidвыводит идентификатор процесса для каждого процесса во всех заданиях.
В системах, поддерживающих эту функцию, jobs будет выводить использование ЦП каждого задания с момента последнего выполнения команды. Использование ЦП выражается в процентах от полной активности ЦП. Обратите внимание, что в многопроцессорных системах общая активность может превышать 100%.
Пример
jobs выводит сводку текущих заданий.
Назад к списку команд.
math - Выполнение математических вычислений
Синтаксис
math [-sN | --scale=N] [--] EXPRESSION
Описание
math используется для выполнения математических вычислений. Это очень тонкий оболочный скрипт для программы bc, который позволяет указать выражение из командной строки без использования нестандартных расширений или конвейера.
Описание синтаксиса, поддерживаемого командой math, см. в руководстве по программе bc. Имейте в виду, что расширение параметров происходит для любых выражений перед их вычислением. Это может быть очень полезно для выполнения вычислений, связанных с переменными оболочки или выводом подстановки команд, но это также означает, что скобки необходимо экранировать.
Доступны следующие параметры:
-
-sNили--scale=Nустанавливает разрядность результата.Nдолжен быть целым числом и по умолчанию равен нулю. Это просто устанавливает переменную bcscaleдо указанного значения.
Возвращаемые значения
Если предоставлены неверные параметры или выражение отсутствует, возвращаемое значение status равно двум. Если выражение некорректно, возвращаемое значение status равно трём. Если bc возвращает результат 0 (буквально, а не 0.0 или аналогичные варианты), возвращаемое значение status равно одному, в противном случае оно равно нулю.
Примеры
math 1+1 выводит 2.
math $status-128 выводит числовой выходной статус последней команды минус 128.
math 10 / 6 выводит 1.
math -s0 10.0 / 6.0 выводит 1.
math -s3 10 / 6 выводит 1.666.
Предупреждения
Вы всегда должны ставить разделитель -- перед выражением. В 99,99% случаев вы получите желаемый результат без разделителя. Что-то вроде math -10.0 / 2 завершится ошибкой, потому что отрицательное значение с плавающей точкой обрабатывается как недопустимый флаг. Но math -10 / 2 будет работать, потому что отрицательные целые числа обрабатываются как особые случаи.
Обратите внимание, что оператор modulo (x % y) не определен для арифметики с плавающей точкой. Команда bc дает бессмысленный результат, а не выдает ошибку и не завершается в этом случае. Не имеет значения, являются ли аргументы целыми числами; например, 10 % 4. Вы все равно получите неверный результат. Не используйте флаг -sN с N, большим нуля, если хотите получить осмысленные ответы при использовании оператора modulo.
Назад к списку команд.
nextd - переход вперед по истории каталогов
Синтаксис
nextd [ -l | --list ] [POS]
Описание
nextd переходит вперед на POS позиций в истории посещенных каталогов; если достигнут конец истории, выводится сообщение об ошибке.
Если указан флаг -l или --list, отображается текущая история каталогов.
Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещенными каталогами. История хранится в переменных $dirprev и $dirnext, которые эта команда обрабатывает.
Возможно, вас заинтересует команда cdh, которая предоставляет более интуитивный способ перехода к недавно посещенным каталогам.
Пример
cd /usr/src # Working directory is now /usr/src cd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell prevd # Working directory is now /usr/src nextd # Working directory is now /usr/src/fish-shell
Назад к списку команд.
not - инвертировать выходной статус задания
Синтаксис
not COMMAND [OPTIONS...]
Описание
not инвертирует выходной статус другой команды. Если выходной статус равен нулю, not возвращает 1. В противном случае, not возвращает 0.
Пример
Следующий код сообщает об ошибке и завершает работу, если не найдено ни одного файла с именем spoon.
if not test -f spoon
echo There is no spoon
exit 1
end
Назад к списку команд.
open - открыть файл в его по умолчанию приложении
Синтаксис
open FILES...
Описание
open открывает файл в его стандартном приложении, используя соответствующий инструмент для операционной системы. В GNU/Linux для этого требуется общая, но необязательная утилита xdg-open из пакета xdg-utils.
Обратите внимание, что эта функция не будет использоваться, если команда с таким именем существует (что является случаем в macOS или Haiku).
Пример
open *.txt открывает все текстовые файлы в текущем каталоге с помощью текстового редактора по умолчанию вашей системы.
Назад к списку команд.
or - условно выполнить команду
Синтаксис
COMMAND1; or COMMAND2
Описание
or используется для выполнения команды, если текущий выходной статус (установленный предыдущей командой) не равен 0.
Выражения or могут использоваться как часть условия в блоке and или while. См. документацию для if и while для примеров.
or не изменяет текущий выходной статус сам по себе, но команда, которую он запускает, скорее всего, будет. Выходной статус последней завершившейся фоновой команды всегда можно получить, используя переменную $status.
Пример
Следующий код запускает команду make для построения программы. Если сборка прошла успешно, программа устанавливается. Если любой из шагов завершился неудачей, выполняется make clean, который удаляет файлы, созданные процессом сборки.
make; and make install; or make clean
Назад к списку команд.
popd - перемещение по стеку каталогов
Синтаксис
popd
Описание
popd удаляет верхний каталог из стека каталогов и изменяет текущий каталог на новый верхний каталог. Используйте pushd для добавления каталогов в стек.
Возможно, вас заинтересует команда cdh, которая предоставляет более интуитивный способ перехода к недавно посещенным каталогам.
Пример
pushd /usr/src # Working directory is now /usr/src # Directory stack contains /usr/src pushd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src /usr/src/fish-shell popd # Working directory is now /usr/src # Directory stack contains /usr/src
Назад к списку команд.
prevd - переход назад по истории каталогов
Синтаксис
prevd [ -l | --list ] [POS]
Описание
prevd переходит назад на POS позиций в истории посещенных каталогов; если достигнут начало истории, выводится предупреждение.
Если указан флаг -l или --list, отображается текущая история каталогов.
Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещенными каталогами. История хранится в переменных $dirprev и $dirnext, которые эта команда обрабатывает.
Возможно, вас заинтересует команда cdh, которая предоставляет более интуитивный способ перехода к недавно посещенным каталогам.
Пример
cd /usr/src # Working directory is now /usr/src cd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell prevd # Working directory is now /usr/src nextd # Working directory is now /usr/src/fish-shell
Назад к списку команд.
printf - вывод текста в соответствии с форматом
Синтаксис
printf format [argument...]
Описание
printf форматирует строку FORMAT с аргументом ARGUMENT и отображает результат.
Строка FORMAT должна содержать спецификаторы формата, каждый из которых заменяется последующим аргументом в соответствии со спецификатором. Спецификаторы подробно описаны ниже и взяты из функции C-библиотеки printf(3).
В отличие от echo, printf не добавляет новую строку, если это не указано в строке.
Допустимые спецификаторы формата:
-
%d: Аргумент будет использован как целое десятичное число (со знаком или без знака) -
%i: Аргумент будет использован как целое число со знаком -
%o: Восьмеричное беззнаковое целое число -
%u: Беззнаковое десятичное целое число -
%xили%X: Беззнаковое шестнадцатеричное целое число -
%f,%gили%G: Число с плавающей точкой -
%eили%E: Число с плавающей точкой в научной (XXXeYY) записи -
%s: Строка -
%b: Строка, интерпретирующая обратные слеши, за исключением того, что восьмеричные escape-последовательности имеют вид \0 или \0ooo.
%% обозначает литеральный "%".
Обратите внимание, что преобразование может завершиться неудачей, например, "102.234" не преобразуется без потерь в целое число, вызывая ошибку печати в printf.
printf также знает ряд обратных слешей:
-
\"двойная кавычка -
\\обратный слеш -
\aсигнал (звонок) -
\bвозврат на одну позицию влево -
\cне производить дальнейший вывод -
\eescape -
\fподача страницы -
\nперевод строки -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\oooвосьмеричное число (ooo - от 1 до 3 цифр) -
\xhhшестнадцатеричное число (hhh - от 1 до 2 цифр) -
\uhhhh16-битный символ Unicode (hhhh - 4 цифры) -
\Uhhhhhhhh32-битный символ Unicode (hhhhhhhh - 8 цифр)
Аргумент format используется столько раз, сколько необходимо, для преобразования всех переданных аргументов. Если спецификатор формата не подходит для данного аргумента, выводится ошибка. Например, `printf 'd' "102.234"` вызывает ошибку, так как "102.234" нельзя отформатировать как целое число.
Этот файл импортирован из printf в GNU Coreutils версии 6.9. Если вы хотите использовать более новую версию printf, например, ту, что поставляется с вашей операционной системой, попробуйте command printf.
Пример
printf '%s\t%s\n' flounder fish
Выведет «flounder fish» (разделенные символом табуляции), после чего символ новой строки. Это полезно для записи завершений, так как fish ожидает, что скрипты завершения выведут опцию, за которой следует описание, разделенные символом табуляции.
printf '%s:%d' "Number of bananas in my pocket" 42
Выведет «Количество бананов в моём кармане: 42», без новой строки.
Вернуться к списку команд.
prompt_pwd - Вывод pwd, подходящего для приглашения
Сводка
prompt_pwd
Описание
prompt_pwd — это функция для вывода текущей рабочей директории в формате, подходящем для приглашения. Она заменит домашний каталог на "~" и сократит каждый компонент пути, кроме последнего, до значения по умолчанию в один символ.
Для изменения количества символов на каждый компонент пути установите $fish_prompt_pwd_dir_length в желаемое число. Установка значения 0 или некорректного значения полностью отключит сокращение.
Примеры
> cd ~/ > echo $PWD /home/alfa > prompt_pwd ~ > cd /tmp/banana/sausage/with/mustard > prompt_pwd /t/b/s/w/mustard > set -g fish_prompt_pwd_dir_length 3 > prompt_pwd /tmp/ban/sau/wit/mustard
Вернуться к списку команд.
psub - выполнение подстановки процесса
Сводка
COMMAND1 ( COMMAND2 | psub [-F | --fifo] [-f | --file] [-s SUFFIX])
Описание
Некоторые оболочки (например, ksh, bash) имеют синтаксис, который представляет собой смесь подстановки команд и конвейеризации, называемый подстановкой процесса. Он используется для отправки вывода команды в вызывающую команду, так же, как и подстановка команд, но с той разницей, что вывод не отправляется через аргументы командной строки, а через именованную трубу, при этом имя файла именованной трубы передается в качестве аргумента вызываемой программе. psub в сочетании с обычной подстановкой команд обеспечивает ту же функциональность.
Доступны следующие варианты:
-
-fили--fileзаставят psub использовать обычный файл вместо именованной трубы для связи с вызывающим процессом. Это приведет к тому, чтоpsubбудет значительно медленнее при работе с большими объемами данных, но имеет преимущество, что процесс чтения может перемещаться по потоку. Это значение по умолчанию. -
-Fили--fifoзаставят psub использовать именованную трубу вместо файла. Вы должны использовать это только в том случае, если команда генерирует не более 8 КБ вывода. Предел буферизации данных FIFO варьируется в зависимости от ОС, но обычно составляет 8 КБ, 16 КБ или 64 КБ. Если вы используете этот параметр, и команда слева от конвейера psub генерирует больше вывода, вероятно, произойдет тупик. -
-sили--suffixдобавьте SUFFIX к имени файла.
Пример
diff (sort a.txt | psub) (sort b.txt | psub) # shows the difference between the sorted versions of files `a.txt` and `b.txt`. source-highlight -f esc (cpp main.c | psub -f -s .c) # highlights `main.c` after preprocessing as a C source.
Вернуться к списку команд.
pushd - добавить директорию в стек директорий
Сводка
pushd [DIRECTORY]
Описание
Функция pushd добавляет DIRECTORY в верхнюю часть стека директорий и делает её текущей рабочей директорией. popd вытащит её и вернётся в исходную директорию.
Без аргументов она меняет верхние две директории в стеке.
pushd +NUMBER вращает стек против часовой стрелки, т.е. снизу вверх
pushd -NUMBER вращает по часовой стрелке, т.е. сверху вниз.
См. также dirs и dirs -c.
Вы можете быть заинтересованы в команде cdh, которая предоставляет более интуитивный способ перехода к недавно посещенным директориям.
Пример
pushd /usr/src # Working directory is now /usr/src # Directory stack contains /usr/src pushd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src /usr/src/fish-shell pushd /tmp/ # Working directory is now /tmp # Directory stack contains /tmp /usr/src /usr/src/fish-shell pushd +1 # Working directory is now /usr/src # Directory stack contains /usr/src /usr/src/fish-shell /tmp popd # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src/fish-shell /tmp
Вернуться к списку команд.
pwd - вывод текущей рабочей директории
Сводка
pwd
Описание
pwd выводит (печатает) текущую рабочую директорию.
Обратите внимание, что fish всегда разрешает символические ссылки в текущем пути к директории.
Вернуться к списку команд.
random - генерация случайного числа
Сводка
random random SEED random START END random START STEP END random choice [ITEMS...]
Описание
RANDOM генерирует псевдослучайное целое число из равномерного распределения. Диапазон (включительно) зависит от передаваемых аргументов. Отсутствие аргументов указывает на диапазон [0; 32767]. Если указан один аргумент, внутренний движок будет инициализирован этим аргументом для будущих вызовов RANDOM и вывод не будет произведён. Два аргумента указывают на диапазон [START; END]. Три аргумента указывают на диапазон [START; END] с шагом STEP между возможными выходами. RANDOM choice выберет один случайный элемент из последующих аргументов.
Обратите внимание, что инициализация движка НЕ даст одинаковый результат на разных системах.
Не следует рассматривать RANDOM как криптографически безопасный или даже статистически точный.
Пример
Следующий код будет отсчитывать от случайного чётного числа от 10 до 20 до 1:
for i in (seq (random 10 2 20) -1 1)
echo $i
end
А это откроет случайную картинку из любого из подкаталогов:
open (random choice **jpg)
Вернуться к списку команд.
read - чтение строки ввода в переменные
Сводка
read [OPTIONS] [VARIABLES...]
Описание
read считывает данные со стандартного ввода и сохраняет результат в одну или несколько переменных оболочки. По умолчанию, одна строка (ограниченная новой строкой) считывается в каждую переменную. В качестве альтернативы, для завершения ввода можно использовать нулевой символ или максимальное число символов. В отличие от других оболочек, нет переменной по умолчанию (например, REPLY) для хранения результата.
Доступны следующие варианты:
-
-c CMDили--command=CMDустанавливает начальную строку в буфере команд в интерактивном режиме наCMD. -
-gили--globalделает переменные глобальными. -
-iили--silentделает вводимые символы скрытыми. Это полезно для считывания паролей или другой конфиденциальной информации. Обратите внимание, что в bash короткий флаг —-s. Мы не можем его использовать из-за существующего использования в качестве псевдонима для--shell. -
-lили--localделает переменные локальными. -
-n NCHARSили--nchars=NCHARSзаставляетreadвозвращаться после чтения NCHARS символов или конца строки, что произойдет раньше. -
-p PROMPT_CMDили--prompt=PROMPT_CMDиспользует вывод команды оболочкиPROMPT_CMDв качестве приглашения для интерактивного режима. Команда приглашения по умолчанию —set_color green; echo read; set_color normal; echo "> ". -
-P PROMPT_STRили--prompt-str=PROMPT_STRиспользует строку в качестве приглашения для интерактивного режима. Это эквивалентноecho PROMPT_STRи предоставляется исключительно для избежания необходимости оформления приглашения как команды. Все специальные символы в строке автоматически экранируются перед передачей командеecho. -
-R RIGHT_PROMPT_CMDили--right-prompt=RIGHT_PROMPT_CMDиспользует вывод команды оболочкиRIGHT_PROMPT_CMDв качестве правого приглашения для интерактивного режима. Команда правого приглашения по умолчанию отсутствует. -
-sили--shellвключает подсветку синтаксиса, автодополнение и завершение команды, подходящие для ввода кода скрипта оболочки в интерактивном режиме. -
-uили--unexportпредотвращает экспорт переменных в дочерние процессы (поведение по умолчанию). -
-Uили--universalделает указанную переменную оболочки универсальной. -
-xили--exportэкспортирует переменные в дочерние процессы. -
-aили--arrayсохраняет результат как массив в одной переменной. -
-zили--nullобозначает конец строки символом NUL вместо новой строки. Это также отключает интерактивный режим.
read считывает одну строку ввода со стандартного ввода, разделяет её на токены на основе переменной оболочки IFS, а затем присваивает один токен каждой переменной, указанной в VARIABLES. Если токенов больше, чем переменных, весь оставшийся остаток присваивается последней переменной. В качестве особого случая, если IFS установлено в пустую строку, каждый символ ввода рассматривается как отдельный токен.
Если -a или --array заданы, разрешается только одно имя переменной, и токены хранятся как массив в этой переменной.
См. документацию для set для получения более подробной информации о правилах области видимости переменных.
Когда read достигает конца файла (EOF) вместо терминатора, код выхода устанавливается в 1. В противном случае он устанавливается в 0.
Для защиты оболочки от излишнего потребления системных ресурсов, read будет потреблять не более 10 МБ (1048576 байт); если терминатор не будет достигнут до этого предела, VARIABLE устанавливается в пустую строку, а код выхода устанавливается в 122. Этот предел можно изменить с помощью переменной FISH_READ_BYTE_LIMIT.
Использование другого файла истории read
Команда read поддерживала флаги -m и --mode-name в версиях fish до 2.7.0 для указания альтернативного файла истории read. Эти флаги теперь устарели и игнорируются. Вместо этого установите переменную fish_history для указания идентификатора сеанса истории. Это повлияет на файл истории read и файл истории команд fish. Вы можете установить его в пустую строку, чтобы указать, что история не должна считываться или записываться. Это полезно для презентаций, где вы не хотите, чтобы потенциально частная или конфиденциальная история была показана аудитории, но хотите, чтобы была доступна история, относящаяся к презентации.
Пример
Следующий код сохраняет значение 'hello' в переменной оболочки $foo.
echo hello|read foo
# This is a neat way to handle command output by-line:
printf '%s\n' line1 line2 line3 line4 | while read -l foo
echo "This is another line: $foo"
end
Вернуться к списку команд.
realpath - Преобразование пути в абсолютный путь без символических ссылок
Сводка
realpath path
Описание
Эта функция реализована как функция и встроенная команда. Функция попытается использовать внешнюю команду realpath, если она найдена. В противном случае она возвращается к встроенной команде. Встроенная команда не поддерживает никаких опций. Она предназначена для использования только скриптами, которые должны быть портативными. Реализация встроенной команды ведет себя как GNU realpath при вызове без каких-либо опций (что является наиболее распространённым случаем). В общем, скрипты не должны вызывать встроенную команду напрямую. Они должны просто использовать realpath.
Если путь недействителен, переведённый путь не будет записан в стандартный вывод, и будет сообщено об ошибке.
Вернуться к списку команд.
return - остановить текущую внутреннюю функцию
Сводка
function NAME; [COMMANDS...;] return [STATUS]; [COMMANDS...;] end
Описание
return прерывает выполняющуюся функцию. Код возврата устанавливается в STATUS , если он задан.
Обычно он добавляется внутри условного блока, такого как оператор if или switch, чтобы условно остановить выполняемую функцию и вернуться к вызывающей функции, но также может быть использован для указания кода возврата функции.
Пример
Следующий код представляет собой реализацию команды false как функции fish
function false
return 1
end
Вернуться к списку команд.
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 ) [SCOPE_OPTIONS] [VARIABLE_NAME]...
Описание
set манипулирует переменными оболочки.
Если set вызывается без аргументов, имена и значения всех переменных оболочки печатаются в отсортированном порядке. Если некоторые из флагов области видимости или экспорта были заданы, выводятся только переменные, соответствующие заданной области видимости.
При предоставлении имен и значений переменных, set присваивает переменной VARIABLE_NAME значения VALUES....
Следующие опции контролируют область видимости переменных:
-
-lили--localпринудительно задаёт указанной переменной оболочки область видимости, локальную для текущего блока, даже если переменная с заданным именем существует и является нелокальной -
-gили--globalзадаёт указанной переменной оболочки глобальную область видимости. Неглобальные переменные исчезают по завершении блока, к которому они относятся -
-Uили--universalзадаёт указанной переменной оболочки универсальную область видимости. Если эта опция указана, переменная будет общая для всех текущих экземпляров оболочки fish на текущем компьютере и сохранится при перезапуске оболочки. -
-xили--exportэкспортирует указанную переменную оболочки в дочерние процессы (делая её "переменной среды") -
-uили--unexportпредотвращает экспорт указанной переменной оболочки в дочерние процессы
Следующие опции доступны:
-
-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 завершается с нулевым кодом возврата в случае успеха, с ненулевым кодом возврата, если командная строка некорректна, если переменная защищена от записи или если переменной не существует.
Пример
set -xg
# Prints all global, exported variables.
set foo hi
# Sets the value of the variable $foo to be 'hi'.
set -e smurf
# Removes the variable $smurf
set PATH[4] ~/bin
# Changes the fourth element of the $PATH array to ~/bin
if set python_path (type -p python)
echo "Python is at $python_path"
end
# Outputs the path to Python if `type -p` returns true.
Вернуться к списку команд.
set_color - установить цвет терминала
Сводка
set_color [OPTIONS] VALUE
Описание
set_color используется для управления цветом и стилем текста в терминале. VALUE соответствует зарезервированному имени цвета, такому как красный, или значению цвета RGB, заданному как 3 или 6 шестнадцатеричных цифр. Формы br-, как в 'bright', представляют собой варианты с полной яркостью 8 стандартных цветов с нормальной яркостью на многих терминалах. brblack имеет более высокую яркость, чем black — в сторону серого. Специальное ключевое слово normal сбрасывает форматирование текста до значений по умолчанию для терминала.
Допустимые цвета:
- чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой, белый
- brчёрный, brкрасный, brзелёный, bryёлтый, brсиний, brпурпурный, brголубой, brбелый
Можно использовать значение RGB с тремя или шестью шестнадцатеричными цифрами, например A0FF33 или f2f. fish выберет ближайший поддерживаемый цвет. Трехзначное значение эквивалентно указанию каждой цифры дважды; например, set_color 2BC то же самое, что и set_color 22BBCC. Шестнадцатеричные значения RGB могут быть в нижнем или верхнем регистре. В зависимости от возможностей вашего терминала (и уровня поддержки set_color для него) фактический цвет может быть приближён к ближайшему соответствующему зарезервированному имени цвета, или set_color может не повлиять на цвет. Второй цвет может быть задан как желаемый цвет по умолчанию. Например, set_color 124212 brсиний указывает set_color использовать brсиний, если терминал не способен отобразить точный оттенок серого. Это очень полезно, когда терминал с 8 или 16 цветами может иначе не использовать цвет.
Следующие опции доступны:
-
-b,--backgroundЦВЕТ устанавливает цвет фона. -
-c,--print-colorsпечатает список 16 именованных цветов. -
-o,--boldвключает режим полужирного шрифта. -
-d,--dimвключает режим полупрозрачного шрифта. -
-i,--italicsвключает режим курсива. -
-r,--reverseвключает режим обратного видео. -
-u,--underlineвключает режим подчеркивания.
Использование ключевого слова normal сбросит цвет переднего плана, фона и всё форматирование до значений по умолчанию.
Примечания
- Использование ключевого слова normal сбросит как цвет фона, так и цвет переднего плана до значений по умолчанию для терминала.
- Установка цвета фона влияет только на символы, написанные после этого. Fish не предоставляет способ установить цвет фона для всего окна терминала. Настройка цвета фона окна (и других атрибутов, таких как его непрозрачность) должна выполняться с использованием механизмов, предоставляемых терминалом.
- Некоторые терминалы используют последовательность escape
--boldдля перехода к набору более ярких цветов, а не для увеличения веса текста. -
set_colorработает путём печати последовательностей символов в stdout. Если используется в подстановке команд или в канале, эти символы также будут захвачены. Это может быть или не быть желательным. Проверка кода возвратаisatty stdoutперед использованиемset_colorможет быть полезна для решения не применять форматирование цвета в скрипте.
Примеры
set_color red; echo "Roses are red" set_color blue; echo "Violets are blue" set_color 62A; echo "Eggplants are dark purple" set_color normal; echo "Normal is nice" ## Resets the background too
Обнаружение возможностей терминала
Fish использует эвристику для определения, поддерживает ли терминал палитру из 256 цветов вместо более ограниченной палитры из 16 цветов устаревших терминалов. Поддержку можно принудительно включить, установив fish_term256 в 1. Если $TERM содержит "256color" (например, xterm-256color), поддержка 256 цветов включена. Если $TERM содержит xterm, поддержка 256 цветов включена (кроме macOS: $TERM_PROGRAM и $TERM_PROGRAM_VERSION используются для определения Terminal.app с macOS 10.6; поддержка отключена здесь, так как известно, что он сообщает xterm и поддерживает только 16 цветов.
Если terminfo сообщает о поддержке 256 цветов для терминала, поддержка всегда будет включена. Для отладки проблем с палитрой цветов tput colors может быть полезен для просмотра количества цветов в terminfo для терминала. Fish, запущенный как fish -d2, будет включать диагностические сообщения, указывающие используемый режим поддержки цвета.
Многие терминалы поддерживают 24-битные (т. е. истинные цвета) цветовые escape-последовательности. К ним относятся современные xterm, Gnome Terminal, Konsole и iTerm2. Fish пытается обнаружить такие терминалы различными способами в config.fish Вы можете явно включить эту поддержку через set fish_term24bit 1.
Команда set_color использует базу данных terminfo для поиска способа изменения цвета терминала в используемом терминале. Некоторые системы имеют старые и неполные базы данных terminfo и могут отсутствовать цветовая информация для терминалов, которые её поддерживают. Fish будет предполагать, что все терминалы могут использовать escape-последовательности ANSI X3.64, если определение terminfo указывает, что цвет ниже 16 не поддерживается.
Поддержка курсива, затемнения, инверсии и других режимов не гарантируется во всех эмуляторах терминалов. Fish пытается определить, поддерживает ли терминал эти режимы, даже если база данных terminfo может быть не обновлена.
Назад к списку команд.
source - оценка содержимого файла.
Краткое описание
source FILENAME [ARGUMENTS...]
Описание
source выполняет команды указанного файла в текущей оболочке. Это отличается от запуска нового процесса для выполнения команд (т. е. fish < FILENAME), так как команды будут выполняться текущей оболочкой, что означает, что изменения в переменных оболочки повлияют на текущую оболочку. Если после имени файла указаны дополнительные аргументы, они будут вставлены в переменную $argv. Переменная $argv не будет содержать имя исходного файла.
Если файл не указан или если имя файла '-' используется, будет прочитан стандартный ввод.
Код возврата source — это код возврата последней задачи для выполнения. Если возникнут проблемы при открытии или чтении файла, source завершается с ненулевым кодом возврата.
. (одинарная точка) является псевдонимом для команды source. Использование . устарело в пользу source, а . будет удалено в будущей версии fish.
Пример
source ~/.config/fish/config.fish # Causes fish to re-read its initialization file.
Ограничения
В версиях fish до 2.3.0 переменная $argv содержала бы один элемент (имя исходного файла), если аргументов нет. В противном случае она содержала бы аргументы без имени исходного файла. Такое поведение было очень запутанным и отличалось от других оболочек, таких как bash и zsh.
Назад к списку команд.
status - запрос информации о выполнении fish
Краткое описание
status status is-login status is-interactive status is-block status is-breakpoint status is-command-substitution status is-no-job-control status is-full-job-control status is-interactive-job-control status filename status function status line-number status stack-trace status job-control CONTROL-TYPE
Описание
Без аргументов status отображает сводку текущего состояния входа в систему и управления задачами оболочки.
Доступны следующие операции (подкоманды):
-
is-command-subвозвращает 0, если fish в данный момент выполняет подстановку команды. Также-cили--is-command-substitution. -
is-blockвозвращает 0, если fish в данный момент выполняет блок кода. Также-bили--is-block. -
is-breakpointвозвращает 0, если fish в данный момент отображает приглашение в контексте командыbreakpoint. См. также функциюfish_breakpoint_prompt. -
is-interactiveвозвращает 0, если fish интерактивен - т. е. подключен к клавиатуре. Также-iили--is-interactive. -
is-loginвозвращает 0, если fish является оболочкой входа в систему - т. е. если fish должен выполнить задачи входа в систему, такие как настройка PATH. Также-lили--is-login. -
is-full-job-controlвозвращает 0, если полное управление задачами включено. Также--is-full-job-control(без короткой опции). -
is-interactive-job-controlвозвращает 0, если интерактивное управление задачами включено. Также--is-interactive-job-control(без короткой опции). -
is-no-job-controlвозвращает 0, если управление задачами отключено. Также--is-no-job-control(без короткой опции). -
filenameвыводит имя файла текущего выполняемого скрипта. Такжеcurrent-filename,-fили--current-filename. -
functionвыводит имя текущей вызываемой функции, если возможно, в противном случае выводит «Это не функция» (или эквивалентную переведённую строку). Такжеcurrent-function,-uили--current-function. -
line-numberвыводит номер строки текущего выполняемого скрипта. Такжеcurrent-line-number,-nили--current-line-number. -
job-control CONTROL-TYPEустанавливает тип управления задачами, который может бытьnone,full, илиinteractive. Также-j CONTROL-TYPEили--job-control=CONTROL-TYPE. -
stack-traceвыводит стек вызовов всех функций в стеке вызовов. Такжеprint-stack-trace,-tили--print-stack-trace.
Примечания
Для обратной совместимости каждая подкоманда может также быть указана как длинная или короткая опция. Например, вместо status is-login можно ввести status --is-login. Формы с флагами устарели и могут быть удалены в будущей версии (но не раньше fish 3.0).
Вы можете указать только одну подкоманду за вызов, даже если вы используете форму подкоманды с флагом.
Назад к списку команд.
string - манипулирование строками
Краткое описание
string escape [(-n | --no-quoted)] [--style=xxx] [STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string length [(-q | --quiet)] [STRING...]
string lower [(-q | --quiet)] [STRING...]
string match [(-a | --all)] [((-e | --entire)] [(-i | --ignore-case)] [(-r | --regex)]
[(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string repeat [(-n | --count) COUNT] [(-m | --max) MAX] [(-N | --no-newline)]
[(-q | --quiet)] [STRING...]
string replace [(-a | --all)] [(-f | --filter)] [(-i | --ignore-case)] [(-r | --regex)]
[(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
[STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
[STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
[(-q | --quiet)] [STRING...]
string unescape [--style=xxx] [STRING...]
string upper [(-q | --quiet)] [STRING...]
Описание
string выполняет операции со строками.
Аргументы STRING берутся из командной строки, если стандартный ввод подключён к каналу или файлу, в противном случае они считываются со стандартного ввода, по одной строке на строку. Нельзя одновременно указывать аргументы STRING в командной строке и со стандартного ввода.
Аргументы, начинающиеся с -, обычно интерпретируются как переключатели; -- заставляет последующие аргументы не рассматриваться как переключатели, даже если они начинаются с -. Переключатели и необходимые аргументы распознаются только в командной строке.
Большинство подкоманд принимают переключатель -q или --quiet, который подавляет обычный вывод, но завершается с документированным кодом возврата.
Доступны следующие подкоманды.
Подкоманда «escape»
string escape экранирует каждую строку одним из трёх способов. Первый способ — --style=script. Это по умолчанию. Она изменяет строку таким образом, чтобы её можно было передать обратно в eval для получения исходного аргумента. По умолчанию все специальные символы экранируются, а кавычки используются для упрощения вывода, когда это возможно. Если указаны -n или --no-quoted, упрощённый форматированный вывод в кавычках не используется. Код возврата: 0, если хотя бы одна строка была экранирована, или 1 в противном случае.
Второй способ — --style=var, который гарантирует, что строка может быть использована в качестве имени переменной, кодируя любые небуквенно-цифровые символы в шестнадцатеричном формате. Строка сначала преобразуется в UTF-8 перед кодированием.
Третий способ — --style=url, который гарантирует, что строка может быть использована в качестве URL, кодируя в шестнадцатеричном формате любые символы, которые не являются допустимыми в URL. Строка сначала преобразуется в UTF-8 перед кодированием.
string unescape выполняет обратную операцию команды string escape. Если строка для раскомментирования не отформатирована должным образом, она игнорируется. Например, string unescape --style=var (string escape --style=var $str) вернёт исходную строку.
Подкоманда «join»
string join объединяет свои строковые аргументы в одну строку, разделяя их SEP, который может быть пустой строкой. Код возврата: 0, если выполнено хотя бы одно объединение, или 1 в противном случае.
Подкоманда «length»
string length сообщает длину каждого строкового аргумента в символах. Код возврата: 0, если задан хотя бы один непустой STRING, или 1 в противном случае.
Подкоманда «lower»
string lower преобразует каждый строковый аргумент в нижний регистр. Код возврата: 0, если хотя бы одна строка была преобразована в нижний регистр, иначе 1. Это означает, что в сочетании с флагом -q можно легко проверить, находится ли строка уже в нижнем регистре.
Подкоманда «match»
string match проверяет каждую строку STRING на соответствие шаблону PATTERN и выводит совпадающие подстроки. Только первое совпадение для каждой строки STRING сообщается, если не заданы -a или --all, в этом случае сообщаются все совпадения.
Если заданы -e или --entire, каждая совпадающая строка выводится, включая любой префикс или суффикс, не совпадающие с шаблоном (эквивалентно grep без флага -o). Естественно, можно добиться того же результата, добавив * или .*, в зависимости от того, установлен ли флаг --regex. Флаг --entire — это просто способ избежать необходимости усложнять шаблон и сделать намерение string match более понятным. Без --entire и --regex, шаблон PATTERN должен совпадать со всей строкой STRING, прежде чем он будет выведен.
Сопоставление может быть выполнено без учёта регистра с помощью --ignore-case или -i.
Если заданы --index или -n, каждое совпадение сообщается как начальная позиция (с учётом 1) и длина. По умолчанию шаблон PATTERN интерпретируется как шаблон glob, соответствующий каждой целостной строке STRING аргумента. Шаблон glob считается совпадением только в том случае, если он совпадает со всей строкой.
Если задано --regex или -r, PATTERN интерпретируется как совместимый с Perl регулярный выражение, которое не обязательно должно соответствовать всей строке STRING. Для регулярного выражения, содержащего группы захвата, для каждого совпадения будут сообщены несколько элементов: один для всего совпадения и один для каждой группы захвата. В этом случае будет сообщена только совпадающая часть STRING, если не задано --entire.
Если используется --invert или -v, выбранные строки будут только теми, которые не соответствуют заданному шаблону или регулярному выражению.
Код завершения: 0, если найдено хотя бы одно совпадение, или 1 в противном случае.
Подкоманда "repeat"
string repeat повторяет строку STRING -n или --count раз. Опция -m или --max ограничит количество выведенных символов (исключая символ новой строки). Эту опцию можно использовать самостоятельно или в сочетании с --count. Если оба --count и --max присутствуют, будет выведено максимальное количество символов, если только размер конечной повторяющейся строки меньше максимального значения. В этом случае строка будет повторяться до тех пор, пока не будет достигнуто значение count. Обе --count и --max принимают число, большее или равное нулю. В случае нуля ничего не будет выведено. Если задано -N или --no-newline, вывод не будет содержать символ новой строки в конце. Код завершения: 0, если сгенерированная строка не пустая, 1 в противном случае.
Подкоманда "replace"
string replace аналогична string match, но заменяет непересекающиеся совпадающие подстроки строкой замены и выводит результат. По умолчанию PATTERN обрабатывается как буквальная подстрока для сопоставления.
Если задано -r или --regex, PATTERN интерпретируется как совместимое с Perl регулярное выражение, а REPLACEMENT может содержать управляющие последовательности в стиле C, такие как \t, а также ссылки на группы захвата по номеру или имени, как $n или ${n}.
Если вы укажете флаг -f или --filter, каждая входная строка выводится только в том случае, если была выполнена замена. Это полезно в тех случаях, когда вы бы иначе использовали эту конструкцию: a_cmd | string match pattern | string replace pattern new_pattern. Вместо этого вы можете написать a_cmd | string replace --filter pattern new_pattern.
Код завершения: 0, если выполнена хотя бы одна замена, или 1 в противном случае.
Подкоманда "split"
string split разделяет каждую строку STRING на разделитель SEP, который может быть пустой строкой. Если задано -m или --max, для каждой строки выполняется не более MAX разделений. Если задано -r или --right, разделение выполняется справа налево. Это полезно в сочетании с -m или --max. Код завершения: 0, если выполнено хотя бы одно разделение, или 1 в противном случае.
Подкоманда "sub"
string sub выводит подстроку каждого аргумента строки. Начало подстроки можно указать с помощью -s или --start, за которым следует значение индекса, начинающегося с 1. Положительные значения индекса относятся к началу строки, а отрицательные значения индекса — к концу строки. Значение по умолчанию для начала равно 1. Длина подстроки может быть указана с помощью -l или --length. Если длина не указана, подстрока продолжается до конца каждой строки STRING. Код завершения: 0, если выполнена хотя бы одна операция взятия подстроки, 1 в противном случае.
Подкоманда "trim"
string trim удаляет начальные и конечные пробелы из каждой строки STRING. Если задано -l или --left, удаляются только начальные пробелы. Если задано -r или --right, удаляются только конечные пробелы. Переключатель -c или --chars приводит к удалению символов в CHARS вместо пробелов. Код завершения: 0, если удален хотя бы один символ, или 1 в противном случае.
Подкоманда "upper"
string upper преобразует каждый аргумент строки в верхний регистр. Код завершения: 0, если хотя бы одна строка была преобразована в верхний регистр, иначе 1. Это означает, что в сочетании с флагом -q вы можете легко проверить, уже находится ли строка в верхнем регистре.
Регулярные выражения
Обе подкоманды match и replace поддерживают регулярные выражения при использовании опции -r или --regex. Диалект — PCRE2.
В общем случае специальные символы по умолчанию являются специальными, поэтому a+ соответствует одному или нескольким символам "a", в то время как a\+ соответствует символу "a", за которым следует "+". (a+) соответствует одному или нескольким символам "a" в группе захвата ((?:XXXX) обозначает группу без захвата). Для параметра замены replace, $n относится к n-й группе совпадения. В параметре совпадения \n (например, \1) относится к группам.
Примеры
> string length 'hello, world' 12 > set str foo > string length -q $str; echo $status 0 # Equivalent to test -n $str
> string sub --length 2 abcde ab > string sub -s 2 -l 2 abcde bc > string sub --start=-2 abcde de
> string split . example.com example com > string split -r -m1 / /usr/local/bin/fish /usr/local/bin fish > string split '' abc a b c
> seq 3 | string join ... 1...2...3
> string trim ' abc ' abc > string trim --right --chars=yz xyzzy zany x zan
> echo \x07 | string escape \cg
> string escape --style=var 'a1 b2'\\u6161 \a1_20b2__c_E6_85_A1
Примеры сопоставления шаблонов
> string match '?' a a > string match 'a*b' axxb axxb > string match -i 'a??B' Axxb Axxb > echo 'ok?' | string match '*\?' ok? # Note that only the second STRING will match here. > string match 'foo' 'foo1' 'foo' 'foo2' foo > string match -e 'foo' 'foo1' 'foo' 'foo2' foo1 foo foo2 > string match 'foo?' 'foo1' 'foo' 'foo2' foo1 foo foo2
Примеры сопоставления регулярных выражений
> string match -r 'cat|dog|fish' 'nice dog'
dog
> string match -r -v "c.*[12]" {cat,dog}(seq 1 4)
dog1
dog2
cat3
dog3
cat4
dog4
> string match -r '(\d\d?):(\d\d):(\d\d)' 2:34:56
2:34:56
2
34
56
> string match -r '^(\w{2,4})\g1$' papa mud murmur
papa
pa
murmur
mur
> string match -r -a -n at ratatat
2 2
4 2
6 2
> string match -r -i '0x[0-9a-f]{1,8}' 'int magic = 0xBadC0de;'
0xBadC0de
Примеры замены буквальных строк
> string replace is was 'blue is my favorite' blue was my favorite > string replace 3rd last 1st 2nd 3rd 1st 2nd last > string replace -a ' ' _ 'spaces to underscores' spaces_to_underscores
Примеры замены регулярных выражений
> string replace -r -a '[^\d.]+' ' ' '0 one two 3.14 four 5x' 0 3.14 5 > string replace -r '(\w+)\s+(\w+)' '$2 $1 $$' 'left right' right left $ > string replace -r '\s*newline\s*' '\n' 'put a newline here' put a here
Примеры повторения
> string repeat -n 2 'foo ' foo foo > echo foo | string repeat -n 2 foofoo > string repeat -n 2 -m 5 'foo' foofo > string repeat -m 5 'foo' foofo
Вернуться к индексу команд.
suspend - приостановка текущей оболочки
Синтаксис
suspend [--force]
Описание
suspend приостанавливает выполнение текущей оболочки, отправляя ей сигнал SIGTSTP, возвращаясь к контролирующему процессу. Ее можно возобновить позже, отправив ей сигнал SIGCONT. Для предотвращения приостановки оболочки, у которой нет контролирующего процесса, оболочка не будет приостановлена, если она является оболочкой входа в систему. Это требование обходится, если задана опция --force или оболочка не интерактивная.
Вернуться к индексу команд.
switch - условное выполнение блока команд
Синтаксис
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
Описание
switch выполняет один из нескольких блоков команд в зависимости от того, соответствует ли заданное значение одному из нескольких значений с подстановкой. case используется вместе с инструкцией switch для определения, какой блок должен быть выполнен.
Каждая команда case получает один или несколько параметров. Первая команда case с параметром, соответствующим строке, указанной в команде switch, будет вычислена. Параметры case могут содержать подстановки. Для предотвращения расширения стандартных подстановок с помощью имен файлов необходимо экранировать или заключить их в кавычки.
Обратите внимание, что в Fish не происходит прохождения по случаям. Выполняется только первое совпадение.
Обратите внимание, что подстановки команд в операторе case будут вычисляться, даже если его тело не выбирается. Все подстановки, включая подстановки команд, должны быть выполнены перед сравнением значения с параметром.
Пример
Если переменная $animal содержит название животного, следующий код попытается классифицировать его:
switch $animal
case cat
echo evil
case wolf dog human moose dolphin whale
echo mammal
case duck goose albatross
echo bird
case shark trout stingray
echo fish
case '*'
echo I have no idea what a $animal is
end
Если вышеприведенный код был запущен с $animal установленным в whale, вывод будет mammal.
Вернуться к индексу команд.
test - выполнение тестов над файлами и текстом
Синтаксис
test [EXPRESSION] [ [EXPRESSION] ]
Описание
Проверяет заданное выражение и устанавливает код завершения в 0, если оно истинно, и в 1, если ложно. Выражение состоит из одного или нескольких операторов и их аргументов.
Первый формат (test) предпочтительнее. Для совместимости с другими оболочками доступен второй формат: соответствующая пара квадратных скобок ([ [EXPRESSION ] ]).
Этот тест в основном совместим с POSIX.
При использовании переменной в качестве аргумента для оператора теста почти всегда следует заключать ее в двойные кавычки. Есть только две ситуации, когда можно опустить кавычки. Первая — когда аргумент представляет собой строку без пробелов или других символов, являющихся специальными для оболочки (например, точка с запятой). Например, test -b /my/file. Вторая — при использовании переменной, которая расширяется ровно до одного элемента, включая пустую строку (например, `set x ''). If the variable is not set, set but with no value, or set to more than one value you must enclose it in double-quotes. For example,test "$x" = "$y". Since it is always safe to enclose variables in double-quotes when used astest` аргументов, что является рекомендуемой практикой.
Операторы для файлов и каталогов
-
-b FILEвозвращает true, еслиFILEявляется блочным устройством. -
-c FILEвозвращает true, еслиFILEявляется символьным устройством. -
-d FILEвозвращает true, еслиFILEявляется каталогом. -
-e FILEвозвращает true, еслиFILEсуществует. -
-f FILEвозвращает true, еслиFILEявляется обычным файлом. -
-g FILEвозвращает true, если уFILEустановлен бит set-group-ID. -
-G FILEвозвращает true, еслиFILEсуществует и имеет тот же идентификатор группы, что и текущий пользователь. -
-k FILEвозвращает true, если уFILEустановлен бит sticky. Если операционная система не поддерживает данное понятие, возвращается false. Смотрите https://en.wikipedia.org/wiki/Sticky_bit. -
-L FILEвозвращает true, еслиFILEявляется символической ссылкой. -
-O FILEвозвращает true, еслиFILEсуществует и принадлежит текущему пользователю. -
-p FILEвозвращает true, еслиFILEявляется именованной очередью. -
-r FILEвозвращает true, еслиFILEпомечен как доступный для чтения. -
-s FILEвозвращает true, если размерFILEбольше нуля. -
-S FILEвозвращает true, еслиFILEявляется сокетом. -
-t FDвозвращает true, если дескриптор файлаFDявляется терминалом (TTY). -
-u FILEвозвращает true, если уFILEустановлен бит set-user-ID. -
-w FILEвозвращает true, еслиFILEпомечен как доступный для записи; обратите внимание, что это не проверяет, является ли файловая система только для чтения. -
-x FILEвозвращает true, еслиFILEпомечен как исполняемый.
Операторы для текстовых строк
-
STRING1 = STRING2возвращает true, если строкиSTRING1иSTRING2идентичны. -
STRING1 != STRING2возвращает true, если строкиSTRING1иSTRING2не идентичны. -
-n STRINGвозвращает true, если длинаSTRINGненулевая. -
-z STRINGвозвращает true, если длинаSTRINGравна нулю.
Операторы для сравнения и проверки чисел
-
NUM1 -eq NUM2возвращает true, еслиNUM1иNUM2численно равны. -
NUM1 -ne NUM2возвращает true, еслиNUM1иNUM2численно не равны. -
NUM1 -gt NUM2возвращает true, еслиNUM1большеNUM2. -
NUM1 -ge NUM2возвращает true, еслиNUM1больше или равноNUM2. -
NUM1 -lt NUM2возвращает true, еслиNUM1меньшеNUM2. -
NUM1 -le NUM2возвращает true, еслиNUM1меньше или равноNUM2.
Обратите внимание, что поддерживаются только целые числа. Для более сложных математических операций, включая дроби, может быть полезной программа env. Обратитесь к документации вашей операционной системы.
Операторы для объединения выражений
-
COND1 -a COND2возвращает true, еслиCOND1иCOND2оба истинны. -
COND1 -o COND2возвращает true, еслиCOND1илиCOND2истинны.
Выражения могут быть инвертированы с помощью оператора !:
-
! EXPRESSIONвозвращает true, еслиEXPRESSIONложно, и false, еслиEXPRESSIONистинно.
Выражения могут быть сгруппированы с помощью скобок.
-
( EXPRESSION )возвращает значениеEXPRESSION.Обратите внимание, что скобки обычно требуют экранирования с помощью
\(для предотвращения интерпретации как подстановки команды.
Примеры
Если каталог /tmp существует, скопировать файл /etc/motd в него:
if test -d /tmp
cp /etc/motd /tmp/motd
end
Если переменная MANPATH определена и не пуста, вывести её содержимое. (Если MANPATH не определена, она будет расширена до нуля аргументов, если не заключена в кавычки.)
if test -n "$MANPATH"
echo $MANPATH
end
Скобки и операторы -o и -a могут быть объединены для создания более сложных выражений. В данном примере выводится "успех", если существуют файлы /foo или /bar, а также файлы /baz или /bat.
if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \)
echo Success.
end.
Числовые сравнения просто завершатся неудачей, если один из операндов не является числом:
if test 42 -eq "The answer to life, the universe and everything"
echo So long and thanks for all the fish ## will not be executed
end
Частое сравнение — со значением $status:
if test $status -eq 0
echo "Previous command succeeded"
end
Предыдущий тест можно также инвертировать:
if test ! $status -eq 0
echo "Previous command failed"
end
что логически эквивалентно следующему:
if test $status -ne 0
echo "Previous command failed"
end
Стандарты
test реализует подмножество стандарта IEEE Std 1003.1-2008 (POSIX.1). Следующие исключения применимы:
- Операторы
<и>для сравнения строк не реализованы. -
Поскольку данный тест является встроенной командой оболочки, а не самостоятельной утилитой, использование флага -c с специальными дескрипторами файлов, такими как стандартный ввод и вывод, может давать результаты, отличающиеся от ожидаемых при вызове утилиты
testв другой оболочке.В таких случаях можно использовать
commandtestдля явного использования самостоятельной утилитыtestсистемы вместо данной встроенной командыbuiltintest.
Вернуться к индексу команд.
trap - выполнение действия при получении оболочкой сигнала
Синтаксис
trap [OPTIONS] [[ARG] REASON ... ]
Описание
trap является обёрткой над фреймворком доставки событий fish. Она существует для обратной совместимости с оболочками POSIX. Для других целей рекомендуется определять обработчик событий.
Доступны следующие параметры:
-
ARG— команда, которая будет выполнена при передаче сигнала. -
REASON— имя события для отлова. Например, сигнал, такой какINTилиSIGINT, или специальный символEXIT. -
-lили--list-signalsвыводит список имён сигналов. -
-pили--printвыводит все определённые обработчики сигналов.
Если ARG и REASON указаны оба, ARG — команда, которая будет выполнена при наступлении события, указанного REASON (например, при передаче сигнала).
Если ARG отсутствует (и есть только один REASON) или -, каждый указанный сигнал сбрасывается к своему исходному состоянию (значению при входе в оболочку). Если ARG — пустая строка, то сигнал, указанный в REASON, игнорируется оболочкой и командами, которые она вызывает.
Если ARG отсутствует, а -p указан, то команды trap, связанные с каждым REASON, будут отображены. Если не указаны аргументы или указан только -p , trap выведет список команд, связанных с каждым сигналом.
Имена сигналов регистронезависимы, а префикс SIG необязателен.
Код возврата 1, если какой-либо REASON неверен; в противном случае trap возвращает 0.
Пример
trap "status --print-stack-trace" SIGUSR1 # Prints a stack trace each time the SIGUSR1 signal is sent to the shell.
Вернуться к индексу команд.
true - вернуть успешный результат
Синтаксис
true
Описание
true устанавливает код возврата в 0.
Вернуться к индексу команд.
type - показать, как будет интерпретирована команда
Синтаксис
type [OPTIONS] NAME [NAME ...]
Описание
Без опций, type показывает, как каждая NAME будет интерпретирована, если используется как имя команды.
Доступны следующие опции:
-
-aили--allвыводит все возможные определения указанных имён. -
-fили--no-functionsподавляет поиск функций и встроенных команд. -
-tили--typeвыводитfunction,builtin, илиfile, еслиNAMEявляется функцией оболочки, встроенной командой или диском соответственно. -
-pили--pathвозвращает имя исполняемого файла или ничего, еслиtype -t nameне вернётfile. -
-Pили--force-pathвозвращает имя исполняемого файла или ничего, если файл с указанным именем не найден в$PATH. -
-qили--quietподавляет вывод; это полезно при тестировании кода возврата.
Флаги -q, -p, -t и -P (и их длинные аналоги) взаимоисключают. Можно указать только один.
Пример
> type fg fg is a builtin
Вернуться к индексу команд.
ulimit - установить или получить лимиты использования ресурсов
Синтаксис
ulimit [OPTIONS] [LIMIT]
Описание
Встроенная команда ulimit устанавливает или выводит лимиты использования ресурсов оболочки и любых процессов, запущенных ею. Если новое значение лимита опущено, выводится текущее значение лимита для ресурса; в противном случае указанный лимит устанавливается на новое значение.
Используйте один из следующих ключей, чтобы указать, какой лимит ресурса установить или вывести:
-
-cили--core-size: максимальный размер создаваемых файлов ядра. Установив это ограничение в ноль, можно отключить дампы ядра. -
-dили--data-size: максимальный размер сегмента данных процесса. -
-fили--file-size: максимальный размер файлов, созданных оболочкой. -
-lили--lock-size: максимальный размер, который может быть заблокирован в памяти. -
-mили--resident-set-size: максимальный размер резидентного набора. -
-nили--file-descriptor-count: максимальное количество открытых дескрипторов файлов (на большинстве систем это значение установить нельзя). -
-sили--stack-size: максимальный размер стека. -
-tили--cpu-time: максимальное время работы процессора в секундах. -
-uили--process-count: максимальное количество процессов, доступных одному пользователю. -
-vили--virtual-memory-size: максимальный объём виртуальной памяти, доступной оболочке.
Обратите внимание, что не все эти ограничения доступны во всех операционных системах.
Значение ограничения может быть числом в единицах, указанных для ресурса, или одним из специальных значений hard, soft, или unlimited, которые обозначают текущее жёсткое ограничение, текущее мягкое ограничение и отсутствие ограничения, соответственно.
Если ограничение задано, оно является новым значением указанного ресурса. Если ни один параметр не задан, предполагается -f. Значения указаны в килобайтах, за исключением -t, которое указано в секундах, и -n и -u, которые являются значениями без масштабирования. Код возврата равен 0, если не указан недопустимый параметр или аргумент, или при ошибке при установке нового ограничения.
ulimit также принимает следующие переключатели, определяющие тип устанавливаемого ограничения:
-
-Hили--hardустанавливает жёсткое ограничение ресурса -
-Sили--softустанавливает мягкое ограничение ресурса
Жёсткое ограничение можно только уменьшать. После его установки его нельзя увеличить; мягкое ограничение можно увеличить до значения жёсткого ограничения. Если ни -H, ни -S не указаны, при назначении нового значения ограничения обновляются как мягкое, так и жёсткое ограничения, а при сообщении о текущем значении используется мягкое ограничение.
Следующие дополнительные параметры также понимаются ulimit:
-
-aили--allвыводит все текущие ограничения
Реализация fish команды ulimit должна вести себя идентично реализации в bash, за исключением этих отличий:
- Fish
ulimitподдерживает длинные опции в стиле GNU для всех переключателей - Fish
ulimitне поддерживает параметр-pдля получения размера канала. Реализация в bash состоит из проверки во время компиляции, которая эмпирически угадывает это число, записывая в канал и ожидая SIGPIPE. Fish этого не делает, поскольку этот метод определения размера канала ненадежен. В зависимости от версии bash, могут быть дополнительные ограничения, которые нужно установить в bash, но которых нет в fish. - Fish
ulimitне поддерживает получение или установку нескольких ограничений в одной команде, кроме вывода всех значений с помощью переключателя -a
Пример
ulimit -Hs 64 устанавливает жёсткое ограничение размера стека в 64 КБ.
Возврат к списку команд.
umask - установка или получение маски режима создания файла
Синтаксис
umask [OPTIONS] [MASK]
Описание
umask отображает и изменяет "umask", или маску режима создания файла, которая используется для ограничения по умолчанию доступа к файлам.
Маску umask можно выразить либо как восьмеричное число, которое представляет права, которые будут удалены по умолчанию, либо символически, что представляет собой единственные права, которые будут предоставлены по умолчанию.
Права доступа поясняются в руководстве по программе chmod(1).
Без параметров выводится текущая маска режима создания файла в восьмеричном формате.
-
-hили--helpвыводит это сообщение. -
-Sили--symbolicвыводит umask в символической форме вместо восьмеричной. -
-pили--as-commandвыводит umask в форме, которая может быть повторно использована в качестве входных данных
Если в качестве параметра указана числовая маска, текущая маска umask оболочки будет установлена в это значение, и права, заданные этой маской, по умолчанию будут удалены из новых файлов и каталогов.
Если указана символическая маска, следует указать желаемые биты разрешений, а не их обратные значения. Символическая маска — это список прав, разделённый запятыми. Каждое право состоит из трёх частей:
- Первая часть указывает, к кому относится этот набор прав, и может быть одной из
u,g,oилиa, гдеuуказывает пользователя, являющегося владельцем файла,gуказывает группу владельцев файла,oуказывает права других пользователей, иaуказывает, что должны быть изменены все три. - Вторая часть права указывает режим и может быть одной из
=,+или-, где=указывает, что права должны быть установлены в новое значение,+указывает, что указанные права должны быть добавлены к ранее указанным, и-указывает, что указанные права должны быть удалены из ранее указанных. - Третья часть права указывает, какие права должны быть изменены, и может быть любой комбинацией
r,wиx, представляющих права чтения, записи и выполнения.
Если первая и вторая части пропущены, они принимаются как a и = соответственно. Например, r,u+w означает, что все пользователи должны иметь право чтения, а владелец файла также должен иметь право записи.
Обратите внимание, что символические маски в настоящее время не работают должным образом.
Пример
umask 177 или umask u=rw устанавливает маску создания файла для чтения и записи владельцем и без прав для всех остальных пользователей.
Возврат к списку команд.
vared - интерактивное редактирование значения переменной среды
Синтаксис
vared VARIABLE_NAME
Описание
vared используется для интерактивного редактирования значения переменной среды. Массивы переменных целиком редактировать с помощью vared нельзя, но отдельные элементы массивов можно.
Пример
vared PATH[3] редактирует третий элемент массива PATH
Возврат к списку команд.
while - выполнение команды многократно
Синтаксис
while CONDITION; COMMANDS...; end
Описание
while многократно выполняет CONDITION, и если код возврата равен 0, то выполняет COMMANDS.
Если код возврата CONDITION не равен нулю на первой итерации, COMMANDS не будет выполнен вообще.
Для сложных условий можно использовать and или or. Ещё более сложный контроль можно достичь с помощью while true содержащей break.
Пример
while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end # outputs 'file exists' at 10 second intervals as long as the file foo.txt or bar.txt exists.
Возврат к списку команд.
© 2005–2009 Axel Liljencrantz
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/2.7/commands.html