Справочник команд
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
Импортируйте сокращения, определённые на другом_хосте по SSH.
Назад к списку команд.
alias - создание функции
Краткое описание
alias alias NAME DEFINITION alias NAME=DEFINITION
Описание
alias — это простой обёртковый инструмент для встроенной команды function, которая создаёт функцию, оборачивающую команду. У неё похожий синтаксис с POSIX оболочкой 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
Назад к списку команд.
begin - начало нового блока кода
Краткое описание
begin; [COMMANDS...;] end
Описание
begin используется для создания нового блока кода.
Блок выполняется безусловно. begin; ...; end эквивалентно if true; ...; end.
begin используется для группировки нескольких команд в блок. Это позволяет ввести новую область видимости переменных, перенаправить вход или выход набора команд как группы или указать приоритет при использовании условных команд, таких как and.
begin не изменяет текущий код возврата.
Пример
Следующий код устанавливает несколько переменных внутри области видимости блока. Поскольку переменные устанавливаются внутри блока и обладают локальной областью видимости, они автоматически удаляются по завершении блока.
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 и другой символа отправляет этот символ с префиксом escape-символа, привязки клавиш Alt могут быть написаны с использованием экранирования \e. Например, Alt-w может быть записано как \ew. Символ управления может быть записан аналогичным способом, используя экранирование \c, например Control-X (^X) может быть записано как \cx. Обратите внимание, что привязки Alt-клавиш чувствительны к регистру, а привязки клавиш Control - нет. Это ограничение текстовых терминалов, а не fish.
Значение по умолчанию для привязки клавиш может быть установлено, указав SEQUENCE пустой строки (то есть, '' ). Оно будет использоваться, когда ни одна другая привязка не соответствует. Для большинства привязок клавиш имеет смысл использовать функцию self-insert (т.е. bind '' self-insert) в качестве значения по умолчанию. Это будет вставлять любые не привязанные символы в редактор. Непечатные символы игнорируются редактором, поэтому это не приведёт к печати управляющих последовательностей.
Если используется переключатель -k, вместо последовательности используется имя клавиши (например, 'down', 'up' или 'backspace'). Используемые имена аналогичны соответствующим переменным curses, но без префикса 'key_'. (См. terminfo(5) для получения дополнительной информации или используйте bind --key-names для получения списка всех доступных имен клавиш.)
COMMAND может быть любой командой fish, но также может быть одной из набора специальных функций ввода. К ним относятся функции для перемещения курсора, работы с кольцом удаления, выполнения дополнения по табуляции и т.д. Используйте bind --function-names для получения полного списка этих функций ввода.
Когда COMMAND — это команда shellscript, хорошей практикой является размещение фактического кода в функцию и привязка просто к имени функции. Таким образом, становится намного проще тестировать функцию во время редактирования, и результат обычно более читабелен.
Если такой скрипт генерирует вывод, скрипт должен завершаться вызовом commandline -f repaint, чтобы сообщить fish, что требуется перерисовка.
Если указано несколько COMMAND, они все выполняются в указанном порядке при нажатии клавиши.
Если не указан SEQUENCE, все привязки (или только привязки в указанной MODE) выводятся. Если SEQUENCE указана без COMMAND, выводится только соответствующая привязка.
Связки клавиш по умолчанию не сохраняются между сеансами. Непосредственные bind операторы в config.fish не будут иметь никакого эффекта, потому что он выполняется до настройки стандартных клавишных сокращений. Чтобы сохранить пользовательские связки клавиш, поместите bind операторы в функцию, называемую fish_user_key_bindings, которая будет автозагружаться.
Связки клавиш могут использовать «режимы», которые имитируют поведенческую модель модального ввода Vi. По умолчанию используется режим «default», и каждая привязка применяется к одному режиму. Режим можно просмотреть/изменить с помощью переменной $fish_bind_mode.
Доступны следующие параметры:
-
-kили--keyУкажите имя клавиши, например, 'left' или 'backspace', вместо последовательности символов -
-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, когда нажимается Ctrl-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 и переопределяет Ctrl-C для очистки строки ввода.
Специальный случай: Символ escape
Клавиша escape может использоваться отдельно, например, для переключения из режима вставки в обычный режим при использовании связок клавиш Vi. Escape также может использоваться как клавиша «meta» для обозначения начала последовательности escape, такой как функции или стрелки. Также можно определить пользовательские привязки, начинающиеся с символа escape.
fish ожидает некоторое время после получения символа escape, чтобы определить, является ли он самостоятельным или частью последовательности escape. В ожидании дополнительные нажатия клавиш заставляют клавишу escape действовать как клавиша meta. Если другие нажатия клавиш не поступают, она обрабатывается как самостоятельный escape. Время ожидания установлено в 300 миллисекунд (0,3 секунды) в стандартных клавишных привязках и 10 миллисекунд в привязках vi. Его можно настроить, установив переменную fish_escape_delay_ms со значением от 10 до 5000 мс. Рекомендуется, чтобы это была универсальная переменная, которую вы устанавливаете один раз из интерактивного сеанса.
Примечание: в fish 2.2.0 и более ранних версиях значение по умолчанию составляло 10 миллисекунд, и не было возможности его настроить. Это фактически делало невозможным использование escape как клавиши meta.
Вернуться к списку команд.
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 параметры могут содержать подстановки шаблонов. Для предотвращения расширения обычных подстановок шаблонов с использованием имен файлов их необходимо экранировать или заключить в кавычки.
Обратите внимание, что fish не выполняет переход по case-выражениям. Выполняется только первое соответствующее выражение case.
Обратите внимание, что подстановки команд в операторе 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 изменяет текущий рабочий каталог.
Если предоставлен параметр, он станет новым каталогом. Если параметр не указан, будет использовано содержимое переменной среды HOME.
Если DIRECTORY является относительным путём, пути, найденные в массиве переменных среды CDPATH, будут использованы как префиксы для указанного пути.
Обратите внимание, что оболочка попытается изменить каталог без необходимости cd, если указано имя каталога (начинающегося с ., / или ~, или заканчивающегося на /).
Fish также предоставляет функцию-обёртку для встроенной команды cd, которая понимает cd - как переход в предыдущий каталог. См. также prevd. Эта функция-обёртка сохраняет историю 25 самых недавно посещённых каталогов в глобальных переменных $dirprev и $dirnext.
Примеры
cd # changes the working directory to your home directory. cd /usr/src/fish-shell # changes the working directory to /usr/src/fish-shell
Вернуться к индексу команд.
command - запуск программы
Краткое описание
command [OPTIONS] COMMANDNAME [ARGS...]
Описание
command принуждает оболочку выполнить программу COMMANDNAME и проигнорировать любые функции или встроенные команды с тем же именем.
Доступны следующие опции:
-
-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 в список дополнений. -
-o LONG_OPTIONили--old-option=LONG_OPTIONдобавляет длинную опцию в старом стиле в список дополнений (подробности см. ниже). -
-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'). - Опции старого стиля со словами, такие как '
-Wall'. Опции старого стиля со словами могут иметь длину более одного символа, предваряются одним тире и не могут быть сгруппированы вместе. Аргументы опций указываются в следующем параметре ('-ao null'). - Опции GNU со словами, такие как '
--colors'. Опции GNU со словами могут иметь длину более одного символа, предваряются двумя тире и не могут быть сгруппированы вместе. Аргументы опций могут быть указаны в следующем параметре ('--quoting-style shell') или добавлением к опции '=' и значения ('--quoting-style=shell'). Опции GNU со словами могут быть сокращены, если сокращение уникально ('--h') эквивалентно '--help', если help — единственная опция со словами, начинающаяся с 'h').
Опции для указания имени команды и пути к команде могут быть использованы несколько раз для определения одних и тех же завершений для нескольких команд.
Опции для указания переключателей команд и обернутых команд могут быть использованы несколько раз для определения нескольких завершений для команды (или команд) в одном вызове.
Вызов complete несколько раз для одной и той же команды добавляет новые определения поверх любых существующих завершений, определённых для команды.
Если -a или --arguments указаны вместе с опциями со словами, короткими опциями или опциями старого стиля, указанные аргументы используются только как завершения при попытке завершить аргумент для любой из указанных опций. Если -a или --arguments указаны без каких-либо опций со словами, коротких опций или опций старого стиля, указанные аргументы используются при завершении любого аргумента команды (кроме завершения аргумента опции, который был указан с помощью -r или --require-parameter).
Подстановки команд, найденные в OPTION_ARGUMENTS, не должны возвращать список аргументов, разделённых пробелами. Вместо этого они должны возвращать список аргументов, разделённых символом новой строки, и каждый аргумент может необязательно иметь символ табуляции, за которым следует описание аргумента. Любое описание, предоставленное таким образом, переопределяет описание, заданное с помощью -d или --description.
Опции -w или --wraps заставляют указанную команду унаследовать завершения от другой команды. Унаследованная команда считается "оборачивающей" унаследованную команду. Упаковывающая команда может иметь свои собственные завершения помимо унаследованных. Команда может обернуть несколько команд, и оборачивание является транзитивным: если А оборачивает В, а В оборачивает С, то А автоматически наследует все завершения С. Оборачивание может быть удалено с помощью опций -e или --erase. Обратите внимание, что оборачивание работает только для завершений, указанных с помощью -c или --command, и игнорируется при указании завершений с помощью -p или --path.
При удалении завершений можно либо удалить все завершения для определённой команды, указав complete -c COMMAND -e, либо указать конкретную опцию завершения для удаления, указав короткую, длинную или старую опцию.
Пример
Короткий вариант опции -o для команды gcc требует, чтобы после неё следовал файл. Это можно сделать, написав:
complete -c gcc -s o -r
Короткий вариант опции -d для команды grep требует, чтобы одно из строк 'read', 'skip' или 'recurse' было использовано. Это можно указать, написав:
complete -c grep -s d -x -a "read skip recurse"
Команда su принимает любое имя пользователя в качестве аргумента. Имена пользователей задаются как первое поле, разделённое двоеточием, в файле /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 больше не отслеживает её.
Задачи в списке задач получают сигнал завершения работы при завершении работы fish, что обычно приводит к завершению задачи; disown позволяет этим процессам продолжать работу независимо.
Если процесс не указан, удаляется последняя использованная задача (подобно bg и fg). Если указаны один или несколько PID, из списка задач удаляются задачи с указанными идентификаторами процессов. Недействительные задачи игнорируются, и выводится сообщение об ошибке.
Если задача остановлена, ей отправляется сигнал продолжения работы, и выводится сообщение об ошибке. Использовать встроенную команду bg для продолжения задачи после её disown невозможно.
ИД процесса обычно находится с помощью расширения процессов, которое может указывать задачи или искать по имени процесса.
disown возвращает 0, если все указанные задачи были успешно disown, и 1, если возникли какие-либо проблемы.
Пример
firefox &; disown запустит веб-браузер Firefox в фоновом режиме и удалит его из списка задач, что означает, что он не будет закрыт при закрытии процесса fish.
disown (jobs -p) удаляет все задачи из списка задач без их завершения.
Вернуться к списку команд.
echo - отображение строки текста
Синтаксис
echo [OPTIONS] [STRING]
Описание
echo отображает строку текста.
Доступны следующие опции:
-
-n, Не выводить символ новой строки -
-s, Не разделять аргументы пробелами -
-E, Отключить интерпретацию обратных слешей (по умолчанию) -
-e, Включить интерпретацию обратных слешей
Последовательности эскейпов
Если используется -e, распознаются следующие последовательности:
- обратная косая черта
- сигнал тревоги (BEL)
- удаление
- не генерировать дальнейшего вывода
- escape
- перевод страницы
- новая строка
- возврат каретки
- горизонтальная табуляция
- вертикальная табуляция
- байт с восьмеричным значением NNN (1-3 цифры)
- байт с шестнадцатеричным значением 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 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, задание с указанным идентификатором группы выводится в переднем плане.
Идентификатор процесса желаемого процесса обычно находится с помощью расширения процесса. Fish способен расширять гораздо больше, чем просто числовой PID, включая ссылку на себя и поиск PID по имени.
Пример
fg %1 выведет задание с идентификатором задания 1 в переднем плане.
Назад к списку команд.
fish - дружелюбная интерактивная оболочка
Краткое описание
fish [OPTIONS] [-c command] [FILE [ARGUMENTS...]]
Описание
fish — это оболочка командной строки, разработанная в первую очередь для интерактивного использования. Полное руководство доступно в формате HTML с помощью команды help внутри fish.
Доступны следующие параметры:
-
-cили--command=COMMANDSвычислить указанные команды вместо чтения из командной строки -
-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_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 команды, соответствующей захваченной последовательности символов, в стандартный вывод. Если последовательность символов соответствует имени специальной клавиши (см. 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выводит информацию об использовании.
Примечания по использованию
Задержка в миллисекундах с момента получения предыдущего символа включена в диагностическую информацию, записываемую в 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 будет отображаться в позиции индикатора режима слева от обычного приглашения.
В fish_mode_prompt не поддерживаются несколько строк.
Вернуться к списку команд.
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 не установлена, но установлена $VISUAL, она будет использована. В противном случае будет использован встроенный редактор. Обратите внимание, что для ввода символа новой строки с использованием встроенного редактора нужно нажать 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_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 [ -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если функция была определена интерактивно или в командной строке или считывалась со стандартного ввода, и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.
Если указана SECTION, отображается справка для этой команды.
Если переменная среды 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будет использован, если вы не укажете другой параметр поиска. Записи упорядочены от самых новых к самым старым. Если stdout присоединён к tty, вывод будет направлен в ваш pager функцией history. Команда history просто записывает результаты в stdout. -
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.
Примечания
Если вы укажете и --prefix и --contains, используется последний флаг.
Обратите внимание, что для обратной совместимости каждая подкоманда также может быть указана в виде длинного параметра. Например, вместо history search вы можете ввести history --search. Эти длинные параметры устарели и будут удалены в будущей версии.
Назад к индексу команд.
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.
Если указанный дескриптор файла является терминалом, код завершения команды равен нулю. В противном случае код завершения не равен нулю. Сообщения в стандартную ошибку не выводятся.
Примеры
В интерактивной оболочке команды ниже завершаются со значением возврата ноль:
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 и их состояние.
jobs принимает следующие переключатели:
-
-cили--commandвыводит имя команды для каждого процесса в задачах. -
--commandили-gвыводит только идентификатор группы каждой задачи. -
--groupили-lвыводит только последнюю запущенную задачу. -
--lastили-pвыводит идентификатор процесса для каждого процесса во всех задачах.
В системах, поддерживающих эту функцию, jobs выводит использование ЦП каждой задачей с момента выполнения последней команды. Использование ЦП выражается в процентах от полной активности ЦП. Обратите внимание, что в многопроцессорных системах общая активность может быть больше 100%.
Пример
jobs выводит сводку текущих задач.
Вернуться к индексу команд.
math - Выполнение математических вычислений
Синтаксис
math [-sN] EXPRESSION
Описание
math используется для выполнения математических вычислений. Это очень тонкий обертка для программы bc, что позволяет указать выражение из командной строки без использования нестандартных расширений или конвейера.
Описание синтаксиса, поддерживаемого math, см. в руководстве по программе bc. Имейте в виду, что подстановка параметров происходит для любых выражений до их оценки. Это может быть очень полезно для выполнения вычислений, связанных с переменными оболочки или выводом подстановки команд, но это также означает, что скобки необходимо экранировать.
Доступны следующие параметры:
-
-sNУстанавливает масштаб результата.Nдолжен быть целым числом и по умолчанию равен нулю. Это просто устанавливает переменную bcscaleна заданное значение. Обратите внимание, что вы не можете вставить пробел между-sиN.
Значения возврата
При неверных параметрах или отсутствии выражения возвращается код 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.
Предостережения
Обратите внимание, что оператор взятия остатка (x % y) не определён для вычислений с плавающей точкой. Команда bc даёт бессмысленный результат вместо выдачи ошибки и сбоя в этом случае. При этом не имеет значения, являются ли аргументы целыми числами; например, 10 % 4. Вы по-прежнему получите неверный результат. Не используйте флаг -sN с N, большим нуля, если вы хотите получить осмысленные ответы при использовании оператора взятия остатка.
Вернуться к индексу команд.
nextd - переход вперед по истории каталогов
Синтаксис
nextd [ -l | --list ] [POS]
Описание
nextd перемещается вперед на POS позиций в истории посещенных каталогов; если конец истории достигнут, выводится предупреждение.
Если указан флаг -l или --list, также отображается текущая история каталогов.
Обратите внимание, что команда cd ограничивает историю каталогов 25 последними посещенными каталогами. История хранится в переменных $dirprev и $dirnext, которые эта команда обрабатывает.
Пример
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 для добавления каталогов в стек.
Пример
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, которые эта команда обрабатывает.
Пример
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: Как строка, интерпретируя экранированные обратные слэши, за исключением того, что восьмеричные экранирования имеют вид \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] [-s SUFFIX])
Описание
Позиционные оболочки имеют синтаксис, который является смесью подстановки команд и конвейеризации, называемой подстановкой процесса. Она используется для отправки вывода команды в вызывающую команду, очень похоже на подстановку команд, но с тем отличием, что вывод не отправляется через аргументы командной строки, а через именованную трубу, а имя именованной трубы отправляется аргументом вызывающей программе. psub в сочетании с обычной подстановкой команд обеспечивает такую же функциональность.
Если для psub задан переключатель -f или --file, psub будет использовать обычный файл вместо именованной трубы для связи с вызывающим процессом. Это приведет к значительному замедлению работы psub при больших объёмах данных, но имеет преимущество, что процесс чтения может использовать позицию в потоке.
Если заданы переключатели -s или ---suffix, psub добавит 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 -s .c) # highlights `main.c` after preprocessing as a C source.
Назад к списку команд.
pushd - добавить директорию в стек директорий
Краткое описание
pushd [DIRECTORY]
Описание
Функция pushd добавляет DIRECTORY на вершину стека директорий и делает её текущей рабочей директорией. popd извлечёт её и вернётся в исходную директорию.
Без аргументов она меняет верхние две директории в стеке.
pushd +NUMBER вращает стек против часовой стрелки, т. е. снизу вверх.
pushd -NUMBER вращает по часовой стрелке, т. е. сверху вниз.
См. также dirs и dirs -c.
Пример
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 считывает со стандартного ввода и сохраняет результат в одной или нескольких переменных оболочки. По умолчанию считывается одна строка, завершённая символом новой строки, но доступны варианты для считывания до нулевого символа и для ограничения каждой «строки» максимальным количеством символов.
Доступны следующие варианты:
-
-c CMDили--command=CMDустанавливает начальную строку в буфере команды интерактивного режима наCMD. -
-gили--globalделает переменные глобальными. -
-iили--silentделает набираемые символы невидимыми. Это полезно для чтения паролей или другой конфиденциальной информации. Обратите внимание, что в bash короткая форма —-s. Мы не можем использовать это из-за существующего использования в качестве алиса для--shell. -
-lили--localделает переменные локальными. -
-m NAMEили--mode-name=NAMEзадаёт имя NAME для сохранения/загрузки файла истории. Если NAME — fish, будет доступна обычная история fish. -
-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включает подсветку синтаксиса, автодополнение и завершение команд, подходящие для ввода кода shell-скрипта в интерактивном режиме. -
-uили--unexportпредотвращает экспорт переменных в дочерние процессы (поведение по умолчанию). -
-Uили--universalделает указанную переменную оболочки универсальной. -
-xили--exportэкспортирует переменные в дочерние процессы. -
-aили--nullсохраняет результат в массиве в одной переменной. -
-zили--nullсчитывает до NUL, а не новой строки. Отключает интерактивный режим.
read считывает одну строку ввода со стандартного ввода, разбивает её на токены на основе переменной оболочки IFS, а затем присваивает один токен каждой переменной, указанной в VARIABLES. Если токенов больше, чем переменных, остаток полностью присваивается последней переменной. В качестве особого случая, если IFS установлена в пустую строку, каждый символ ввода считается отдельным токеном.
Если указаны -a или --array, разрешено только одно имя переменной, а токены хранятся в массиве в этой переменной.
См. документацию для set для получения более подробной информации о правилах области действия переменных.
Когда read достигает конца файла (EOF) вместо разделителя, он устанавливает $status в 1. В противном случае он устанавливает его в 0.
В Fish установлен по умолчанию лимит в 10 МБ на количество символов, которое каждое read может потреблять. Если вы попытаетесь прочитать больше, чем это, $status устанавливается в 122, и переменная будет пустой. Вы можете изменить этот лимит, установив переменную FISH_READ_BYTE_LIMIT в любое время, включая окружение перед запуском 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 манипулирует переменными оболочки.
Если set вызывается без аргументов, имена и значения всех переменных оболочки выводятся в отсортированном порядке. Если некоторые флаги области видимости или экспорта были заданы, выводятся только переменные, соответствующие заданной области видимости.
При предоставлении как имен переменных, так и их значений, set присваивает переменной VARIABLE_NAME значения VALUES....
Следующие опции управляют областью видимости переменных:
-
-lили--localпринудительно задаёт указанной переменной оболочки область видимости, локальную для текущего блока, даже если переменная с таким именем существует и является нелокальной -
-gили--globalзадаёт указанной переменной оболочки глобальную область видимости. Неглобальные переменные исчезают, когда заканчивается блок, к которому они относятся -
-Uили--universalзадаёт указанной переменной оболочки универсальную область видимости. Если эта опция указана, переменная будет общим ресурсом для всех текущих экземпляров Fish у текущих пользователей на данном компьютере и будет сохранена при перезапуске оболочки. -
-xили--exportэкспортирует указанную переменную оболочки в дочерние процессы (делая её «переменной среды») -
-uили--unexportпредотвращает экспорт указанной переменной оболочки в дочерние процессы
Следующие опции доступны:
-
-eили--eraseудаляет указанную переменную оболочки -
-qили--queryпроверяет, определены ли указанные имена переменных. Ничего не выводит, но код выхода встроенной команды — количество переменных, которые не были определены. -
-nили--namesвыводит только имена всех определённых переменных, а не их значения. Имена гарантированно отсортированы. -
-Lили--longне сокращает длинные значения при выводе переменных set
Если переменной присвоено более одного значения, она будет массивом с указанными элементами. Если переменной присвоено ноль элементов, она станет массивом с нулём элементов.
Если имя переменной состоит из одного или нескольких элементов массива, таких как PATH[1 3 7], будут изменены только указанные элементы массива. При указании индексов массива в set, могут использоваться несколько аргументов для указания дополнительных индексов, например, set PATH[1] PATH[4] /bin /sbin. Если вы указываете отрицательный индекс при расширении или присваивании переменной массива, индекс вычисляется с конца массива. Например, индекс -1 означает последний индекс массива.
Правила области видимости при создании или обновлении переменной:
- Если переменная явно задана как универсальная, глобальная или локальная, это значение будет принято. Если переменная с таким же именем существует в другой области видимости, эта переменная не будет изменена.
- Если переменная явно не задана как универсальная, глобальная или локальная, но была ранее определена, используется предыдущая область видимости переменной.
- Если переменная явно не задана как универсальная, глобальная или локальная и никогда ранее не была определена, переменная будет локальной для текущей выполняющейся функции. Обратите внимание, что это отличается от использования флагов
-lили--local. При использовании этих флагов переменная будет локальной для самого внутреннего текущего выполняемого блока, в то время как без них переменная будет локальной для функции. Если никакая функция не выполняется, переменная будет глобальной.
Правила экспорта при создании или обновлении переменной идентичны правилам области видимости для переменных:
- Если переменная явно задана как экспортируемая или неэкспортируемая, это значение будет принято.
- Если переменная явно не задана как экспортируемая или неэкспортируемая, но была ранее определена, правило экспорта переменной сохраняется.
- Если переменная явно не задана как экспортируемая или неэкспортируемая и никогда ранее не была определена, переменная не будет экспортироваться.
В режиме запроса может быть задана область видимости для проверки.
В режиме удаления, если указаны индексы переменных, будут удалены только указанные фрагменты переменной массива.
set требует, чтобы все опции предшествовали другим аргументам. Например, set flags -l будет иметь эффект установки значения переменной flags в '-l', а не установления переменной как локальной.
В режиме присваивания set не изменяет код выхода. Это позволяет одновременно захватывать вывод и код выхода подкоманды, например, if set output (command). В режиме запроса код выхода — это количество переменных, которые не были найдены. В режиме удаления set завершается с кодом выхода 0 в случае успеха, с ненулевым кодом выхода, если командная строка некорректна, если переменная защищена от записи или если переменной не существует.
Пример
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 соответствует зарезервированному имени цвета, например, red, или значению RGB, заданному как 3 или 6 шестнадцатеричных цифр. Формы br-, как в 'bright', являются вариантами с максимальной яркостью 8 стандартных цветов с низкой яркостью на многих терминалах. brblack имеет более высокую яркость, чем black - приближаясь к серому. Специальное ключевое слово normal сбрасывает форматирование текста до значений по умолчанию терминала.
Допустимые цвета:
- black, red, green, yellow, blue, magenta, cyan, white
- brblack, brred, brgreen, bryellow, brblue, brmagenta, brcyan, brwhite
Можно использовать значения RGB с тремя или шестью шестнадцатеричными цифрами, например, A0FF33 или f2f. fish выберет наиболее близкий поддерживаемый цвет. Значение из трёх цифр эквивалентно указанию каждой цифры дважды; например, set_color 2BC то же, что и set_color 22BBCC. Шестнадцатеричные значения RGB могут быть в нижнем или верхнем регистре. В зависимости от возможностей вашего терминала (и уровня поддержки set_color для него) фактический цвет может быть приближен к близкому совпадающему зарезервированному имени цвета, или set_color может не повлиять на цвет. Второй цвет может быть указан как желаемый цвет по умолчанию. Например, set_color 124212 brblue указывает set_color использовать brblue, если терминал не поддерживает точный оттенок серого, который вы хотите. Это очень полезно, когда терминал с 8 или 16 цветами, в противном случае, мог бы не использовать цвет.
Доступные опции:
-
-b,--backgroundCOLOR устанавливает цвет фона. -
-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 -d2 Fish будет включать диагностические сообщения, указывающие используемый режим поддержки цвета.
Многие терминалы поддерживают 24-битные (т.е., истинные цвета) цветовые escape-последовательности. К ним относятся современные xterm, Gnome Terminal, Konsole и iTerm2. Fish пытается обнаружить такие терминалы различными способами в config.fish. Вы можете явно включить эту поддержку с помощью set fish_term24bit 1.
Команда set_color использует базу данных terminfo, чтобы узнать, как изменить цвета терминала на используемом терминале. Некоторые системы имеют старые и неполные базы данных terminfo и могут не иметь цветовой информации для терминалов, которые ее поддерживают. Fish будет предполагать, что все терминалы могут использовать ANSI X3.64 escape-последовательности, если определение 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-command-substitution status is-no-job-control status is-full-job-control status is-interactive-job-control status current-filename status current-function status current-line-number status print-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-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(без короткого флага). -
current-filenameвыводит имя файла текущего выполняемого скрипта. Также-fили--current-filename. -
current-functionвыводит имя текущей вызываемой функции, если доступно, в противном случае отображается "Не функция". Также-uили--current-function. -
current-line-numberвыводит номер строки текущего выполняемого скрипта. Также-nили--current-line-number. -
job-control CONTROL-TYPEустанавливает тип управления задачами, который может бытьnone,fullилиinteractive. Также-j CONTROL-TYPEили--job-control=CONTROL-TYPE. -
print-stack-traceвыводит трассировку стека всех вызовов функций в стеке вызовов. Также-tили--print-stack-trace.
Примечания
Для обратной совместимости каждая подкоманда также может быть указана как длинный или короткий параметр. Например, вместо status is-login можно набрать status --is-login. Форматы флагов устарели и могут быть удалены в будущих выпусках (но не до выхода версии fish 3.0).
Вы можете указать только одну подкоманду за вызов, даже если вы используете форму подкоманды с флагом.
Вернуться к списку команд.
string - работа со строками
Краткое описание
string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
[STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
[STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
[(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [((-e | --entire)] [(-i | --ignore-case)] [(-r | --regex)]
[(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-f | --filter)] [(-i | --ignore-case)] [(-r | --regex)]
[(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
string repeat [(-n | --count)] [(-m | --max)] [(-N | --no-newline)]
[(-q | --quiet)] [STRING...]
Описание
string выполняет операции со строками.
Строковые аргументы берутся из командной строки, если стандартный ввод подключен к конвейеру или файлу, в этом случае они читаются из стандартного ввода по одной строке на строку. Ошибка возникает, если строковые аргументы указаны как в командной строке, так и в стандартном вводе.
Аргументы, начинающиеся с -, обычно интерпретируются как переключатели; -- заставляет следующие аргументы не обрабатываться как переключатели, даже если они начинаются с -. Переключатели и необходимые аргументы распознаются только в командной строке.
Большинство подкоманд принимают переключатель -q или --quiet, который подавляет обычный вывод, но завершается с указанным кодом возврата.
Доступны следующие подкоманды.
Подкоманда "length"
string length сообщает длину каждого строкового аргумента в символах. Код возврата: 0, если хотя бы одна непустая строка была задана, или 1 в противном случае.
Подкоманда "sub"
string sub выводит подстроку каждого строкового аргумента. Начало подстроки можно указать с помощью -s или --start, за которыми следует значение индекса (с 1). Положительные значения индексов относятся к началу строки, отрицательные — к концу. Значение по умолчанию для начала — 1. Длину подстроки можно указать с помощью -l или --length. Если длина не указана, подстрока продолжается до конца каждой строки. Код возврата: 0, если была выполнена хотя бы одна операция с подстрокой, 1 — в противном случае.
Подкоманда "split"
string split разбивает каждую строку на части, используя разделитель SEP, который может быть пустой строкой. Если указаны -m или --max, то на каждой строке выполняется не более MAX разделений. Если указаны -r или --right, разделение выполняется справа налево. Это полезно в сочетании с -m или --max. Код возврата: 0, если было выполнено хотя бы одно разделение, или 1 в противном случае.
Подкоманда "join"
string join объединяет свои строковые аргументы в одну строку, разделенную SEP, которая может быть пустой строкой. Код возврата: 0, если было выполнено хотя бы одно объединение, или 1 в противном случае.
Подкоманда "trim"
string trim удаляет начальные и конечные пробелы из каждой строки. Если заданы -l или --left, удаляются только начальные пробелы. Если заданы -r или --right, удаляются только конечные пробелы. Переключатели -c или --chars заставляют удалять символы из набора CHARS вместо пробелов. Код возврата: 0, если был удален хотя бы один символ, или 1 в противном случае.
Подкоманда "escape"
string escape экранирует каждую строку так, чтобы ее можно было передать обратно в eval, чтобы получить исходный аргумент. По умолчанию все специальные символы экранируются, а кавычки используются для упрощения вывода при возможности. Если заданы -n или --no-quoted, упрощенное форматирование в кавычках не используется. Код возврата: 0, если была экранирована хотя бы одна строка, или 1 в противном случае.
Подкоманда "match"
string match проверяет каждую строку на соответствие шаблону PATTERN и выводит совпадающие подстроки. Только первое совпадение для каждой строки отображается, если не задан -a или --all, в этом случае отображаются все совпадения. По умолчанию поведение эквивалентно grep -o.
Если задан -e или --entire, каждая совпадающая строка выводится, включая любой префикс или суффикс, не совпадающий с шаблоном (эквивалентно grep без флага -o). Вы можете, очевидно, достичь того же результата, добавив * или .* в зависимости от того, задан ли флаг --regex. Флаг --entire просто позволяет избежать усложнения шаблона таким образом и сделать намерение string match более ясным.
Сопоставление можно сделать регистронезависимым с помощью --ignore-case или -i.
Если заданы --index или -n, каждый совпадение отображается как позиция начала с индексом 1 и длина. По умолчанию, PATTERN интерпретируется как шаблон glob, сопоставляемый с каждым полным аргументом STRING. Шаблон glob считается корректным только если он полностью соответствует STRING.
Если заданы --regex или -r, PATTERN интерпретируется как совместимый с Perl регулярное выражение, которое не обязательно должно соответствовать всему STRING. Для регулярного выражения, содержащего группы захвата, для каждого совпадения будут отображаться несколько элементов: один для всего совпадения и один для каждой группы захвата.
Если используется --invert или -v, выбранные строки будут только те, которые не соответствуют заданному шаблону glob или регулярному выражению.
Код выхода: 0, если найдено хотя бы одно совпадение, или 1 в противном случае.
Подкоманда "replace"
string replace аналогично string match, но заменяет непересекающиеся совпадающие подстроки строкой замены и выводит результат. По умолчанию, PATTERN рассматривается как подстрока для сопоставления.
Если заданы -r или --regex, PATTERN интерпретируется как совместимое с Perl регулярное выражение, а REPLACEMENT может содержать C-стилевые escape-последовательности, такие как \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 в противном случае.
Подкоманда "repeat"
string repeat повторяет строку STRING -n или --count раз. Опции -m или --max ограничат количество выводимых символов (исключая символ новой строки). Эта опция может использоваться сама по себе или в сочетании с --count. Если оба --count и --max присутствуют, будет выведено максимальное количество символов, если размер итоговой повторяющейся строки меньше максимального значения, в этом случае строка будет повторяться до достижения значения count. --count и --max принимают числа, больше или равные нулю. В случае нуля ничего не выводится. Если заданы -N или --no-newline, в выводе не будет символа новой строки в конце. Код выхода: 0, если полученная строка не пустая, 1 в противном случае.
Регулярные выражения
Обе подкоманды 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
Примеры сопоставления с шаблоном Glob
> string match '?' a a > string match 'a*b' axxb axxb > string match -i 'a??B' Axxb Axxb > echo 'ok?' | string match '*\?' >_ ok?
Примеры сопоставления с регулярными выражениями
> 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. Выполняется только первое совпадающее case.
Обратите внимание, что подстановки команд в операторе 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.
Операторы для файлов и каталогов
-
-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ложно, и ложно, еслиEXPRESSIONистинно.
Выражения могут быть сгруппированы с помощью круглых скобок.
END_OF_DOCUMENT_MARKER ```-
( 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
Стандарты
test реализует подмножество стандарта IEEE Std 1003.1-2008 (POSIX.1). Следующие исключения применяются:
- Операторы
<и>для сравнения строк не реализованы. -
Поскольку данная утилита test является встроенной командой оболочки, а не самостоятельной программой, использование флага -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 указан, то команды обработчиков, связанные с каждым 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подавляет весь вывод; это полезно при тестировании кода возврата.
Пример
> type fg fg is a builtin
Назад к списку команд.
ulimit - установка или получение лимитов использования ресурсов
Краткое описание
ulimit [OPTIONS] [LIMIT]
Описание
Встроенная команда ulimit устанавливает или выводит лимиты использования ресурсов оболочки и любых процессов, запущенных ею. Если новое значение лимита опущено, выводится текущее значение лимита для ресурса; в противном случае указанный лимит устанавливается на новое значение.
Используйте один из следующих переключателей, чтобы указать, какой лимит ресурса установить или получить:
-cили--core-size: максимальный размер файлов core, созданных процессом. Установка этого лимита в ноль позволяет отключить создание файлов core.-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 могут быть дополнительные лимиты, которые отсутствуют в 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.6/commands.html