Spec-Zone.ru › Fish 2.6

Справочник команд

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, то выводится пять строк:
    1. путь, как уже описано,
    2. autoloaded, not-autoloaded или n/a,
    3. номер строки в файле или ноль, если не применимо,
    4. scope-shadowing если функция затеняет переменные в вызывающей функции (обычный случай, если она не была определена с помощью --no-scope-shadowing), иначе no-scope-shadowing или n/a, если функция не определена,
    5. описание функции, минимально экранированное, чтобы это была одна строка или 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 должен быть целым числом и по умолчанию равен нулю. Это просто устанавливает переменную bc scale на заданное значение. Обратите внимание, что вы не можете вставить пробел между -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 не генерировать дальнейший вывод
  • \e escape
  • \f подача страницы
  • \n перевод строки
  • \r возврат каретки
  • \t горизонтальная табуляция
  • \v вертикальная табуляция
  • \ooo восьмеричное число (ooo — от 1 до 3 цифр)
  • \xhh шестнадцатеричное число (hhh — от 1 до 2 цифр)
  • \uhhhh 16-битный символ Unicode (hhhh — 4 цифры)
  • \Uhhhhhhhh 32-битный символ 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 означает последний индекс массива.

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

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

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

  1. Если переменная явно задана как экспортируемая или неэкспортируемая, это значение будет принято.
  2. Если переменная явно не задана как экспортируемая или неэкспортируемая, но была ранее определена, правило экспорта переменной сохраняется.
  3. Если переменная явно не задана как экспортируемая или неэкспортируемая и никогда ранее не была определена, переменная не будет экспортироваться.

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

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

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, --background COLOR устанавливает цвет фона.
  • -c, --print-colors выводит список 16 именованных цветов.
  • -o, --bold устанавливает режим полужирности.
  • -d, --dim устанавливает режим затемнения.
  • -i, --italics устанавливает режим курсива.
  • -r, --reverse устанавливает режим обратного видео.
  • -u, --underline устанавливает режим подчеркивания.

Использование ключевого слова normal сбросит цвет переднего и заднего планов, а также всё форматирование до значений по умолчанию.

Примечания

  1. Использование ключевого слова normal сбросит цвет фона и переднего плана до значений по умолчанию для терминала.
  2. Установка цвета фона влияет только на последующие символы. Fish не предоставляет способ установить цвет фона для всего окна терминала. Настройка цвета фона окна (и других атрибутов, таких как его непрозрачность) должна выполняться с помощью механизмов, предоставляемых терминалом.
  3. Некоторые терминалы используют последовательность escape --bold для переключения на набор более ярких цветов, а не для увеличения начертания текста.
  4. 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 в другой оболочке.

    В таких случаях можно использовать command test для явного использования самостоятельной утилиты test системы вместо данной встроенной команды builtin test.

Назад к списку команд.

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

Spec-Zone.ru

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