Spec-Zone.ru › Fish 3.0

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

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 [SCOPE] WORD EXPANSION
abbr --erase word
abbr --rename [SCOPE] OLD_WORD NEW_WORD
abbr --show
abbr --list

Описание

abbr управляет сокращениями — определенными пользователем словами, которые заменяются более длинными фразами после их ввода.

Например, часто используемая команда, такая как git checkout, может быть сокращена до gco. После ввода gco и нажатия Пробел или Ввод, полный текст git checkout появится в командной строке.

Опции

Доступны следующие опции:

  • -a WORD EXPANSION или --add WORD EXPANSION Добавляет новое сокращение, в результате чего WORD будет расширен до PHRASE.
  • -r OLD_WORD NEW_WORD или --rename OLD_WORD NEW_WORD Переименовывает сокращение со старого слова OLD_WORD на новое NEW_WORD.
  • -s или --show Отображает все сокращения в формате, подходящем для экспорта и импорта.
  • -l или --list Выводит список всех сокращенных слов.
  • -e WORD или --erase WORD Удаляет сокращение WORD.

Кроме того, при добавлении сокращений:

  • -g или --global для использования глобальной переменной.
  • -U или --universal для использования универсальной переменной (по умолчанию).

См. раздел «Внутреннее устройство» для получения дополнительной информации.

Примеры

abbr -a -g gco git checkout

Добавление нового сокращения, где gco будет заменено на git checkout глобально для текущей оболочки. Это сокращение не будет автоматически отображаться в других оболочках, если эта команда не выполняется в этих оболочках (например, при выполнении команд в config.fish).

abbr -a -U l less

Добавление нового сокращения, где l будет заменено на less универсально для всех оболочек. Обратите внимание, что вы опускаете -U, поскольку это значение по умолчанию.

abbr -r gco gch

Переименование существующего сокращения с gco на gch.

abbr -e gco

Удаление сокращения gco.

ssh another_host abbr -s | source

Импорт сокращений, определенных на другом хосте по SSH.

Внутреннее устройство

Каждое сокращение хранится в собственной глобальной или универсальной переменной. Имя состоит из префикса _fish_abbr_ и слова WORD после преобразования с помощью string escape style=var. WORD не может содержать пробелы, но все остальные символы допустимы.

Определение сокращения со сферой действия «глобально» немного быстрее, чем со сферой действия «универсально» (по умолчанию). Однако в целом вы будете использовать «глобально» только при определении сокращений в скрипте запуска, например ~/.config/fish/config.fish следующим образом:

if status --is-interactive
    abbr --add --global first 'echo my first abbreviation'
    abbr --add --global second 'echo my second abbreviation'
    abbr --add --global gco git checkout
    # etcetera
end

Вы можете создавать сокращения интерактивно, и они будут видны в других сеансах fish, если вы используете флаги -U или --universal или не укажете явную область действия, и сокращение еще не определено с глобальной областью действия. Если вы хотите, чтобы оно отображалось только в текущей оболочке, используйте флаги -g или --global.

Вернуться к списку команд.

alias - создание функции

Синтаксис

alias
alias [OPTIONS] NAME DEFINITION
alias [OPTIONS] NAME=DEFINITION

Описание

alias — это простой обёртку для встроенной функции function, которая создаёт функцию, оборачивающую команду. Она имеет синтаксис, аналогичный синтаксису POSIX shell alias. Для других целей рекомендуется определить функцию.

fish отмечает функции, созданные с помощью alias, включая использованную для их создания команду в описании функции. Вы можете перечислить функции, созданные с помощью alias, выполнив alias без аргументов. Их необходимо удалять с помощью functions -e.

  • NAME — имя псевдонима
  • DEFINITION — фактическая команда для выполнения. Строка $argv будет добавлена.

Вы не можете создать псевдоним для функции с тем же именем. Обратите внимание, что пробелы необходимо экранировать в вызове alias так же, как и в командной строке, *даже внутри скобок с кавычками*.

Доступны следующие опции:

  • -h или --help отображает справку по использованию этой команды.
  • -s или --save автоматически сохраняет созданную функцию в вашем каталоге конфигурации fish с помощью funcsave.

Пример

Следующий код создаст rmi, который выполняет rm с дополнительными аргументами при каждом вызове.

alias rmi="rm -i"

# This is equivalent to entering the following function:
function rmi --wraps rm --description 'alias rmi=rm -i'
    rm -i $argv
end

# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":
alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'

Вернуться к списку команд.

and - условное выполнение команды

Синтаксис

COMMAND1; and COMMAND2

Описание

and используется для выполнения команды, если предыдущая команда завершилась успешно (возвратила код состояния 0).

Выражения and могут использоваться в качестве части условия в блоке if или while. См. документацию для if и while для примеров.

and не изменяет текущий код возврата сам по себе, но команда, которую он выполняет, скорее всего, изменит его. Код возврата последней завершившейся фоновой команды всегда можно получить с помощью переменной $status.

Пример

Следующий код выполняет команду make для построения программы. Если сборка выполнена успешно, код возврата make равен 0, и программа устанавливается. Если любой из шагов завершается неудачно, код возврата равен 1, и выполняется make clean, что удаляет файлы, созданные процессом сборки.

make; and make install; or make clean

Вернуться к списку команд.

argparse - анализ опций, переданных скрипту или функции fish

Синтаксис

argparse [OPTIONS] OPTION_SPEC... -- [ARG...]

Описание

Эта команда упрощает обработку аргументов в скриптах и функциях fish, абсолютно идентично тому, как встроенные команды fish обрабатывают свои аргументы. Вы передаёте последовательность аргументов, определяющих распознаваемые опции, за которой следует буквальное --, а затем аргументы для анализа (которые также могут включать буквальное --). Более подробная информация в разделе использование ниже.

Каждый OPTION_SPEC может быть записан на языке предметной области описанном ниже или создан с помощью сопутствующей команды fish_opt. Все OPTION_SPECs должны быть размещены после всех флагов argparse и перед --, разделяющим их с аргументами, которые нужно проанализировать.

Каждая опция, увиденная в списке ARG, приводит к имени переменной вида _flag_X, где X — короткая буква флага, а _flag_X — полное название флага. OPTION_SPEC всегда требует короткого флага, даже если он не может быть использован. Таким образом, всегда будет установлена переменная _flag_X с помощью короткой буквы флага, если соответствующий короткий или длинный флаг обнаружен. Переменная с полным именем флага (например, _flag_help) будет определена только в том случае, если в OPTION_SPEC указано полное имя флага.

Например _flag_h и _flag_help если -h или --help будет виден. Переменная будет установлена в локальной области (как если бы скрипт выполнил set -l _flag_X). Если флаг является булевым (то есть не имеет связанного значения), значениями являются короткий и длинный флаги, увиденные. Если опция не является булевым флагом, значениями будут одно или более значений, соответствующих значениям, собранным при обработке списка ARG. Если флаг не был обнаружен, переменная флага не будет установлена.

Опции

Доступны следующие argparse опции. Они должны быть размещены до всех OPTION_SPEC:

  • -n или --name — имя команды, которое будет вставлено в сообщения об ошибках. Если вы не укажете это значение, будет использоваться argparse.
  • -x или --exclusive должны следовать за списком коротких или длинных опций, которые являются взаимоисключающими. Вы можете использовать эту опцию несколько раз, чтобы определить несколько наборов взаимоисключающих опций.
  • -N или --min-args за которым следует целое число, определяющее минимальное количество допустимых аргументов, не являющихся опциями. По умолчанию значение равно нулю.
  • -X или --max-args за которым следует целое число, определяющее максимальное количество допустимых аргументов, не являющихся опциями. По умолчанию значение равно бесконечности.
  • -s или --stop-nonopt останавливает сканирование аргументов, как только обнаруживается первый аргумент, не являющийся опцией. Использование этого аргумента эквивалентно вызову C-функции getopt_long() с короткими опциями, начинающимися с символа +. Иногда это называется «POSIX-совместимость». Если этот флаг не используется, аргументы переупорядочиваются (т.е., переставляются), чтобы все аргументы, не являющиеся опциями, были перемещены после аргументов опций. Этот режим имеет несколько применений, но основной — реализация команды с подкомандами.
  • -h или --help отображает справку по использованию этой команды.

Использование

Использование этой команды включает передачу двух наборов аргументов, разделенных --. Первый набор состоит из одной или нескольких спецификаций опций (OPTION_SPEC выше) и опций, которые изменяют поведение argparse. Они должны быть перечислены до аргумента --. Второй набор — это аргументы для анализа в соответствии со спецификациями опций. Они появляются после аргумента -- и могут быть пустыми. Более подробная информация ниже, но вот простой пример, который может быть использован в функции с именем my_function:

argparse --name=my_function 'h/help' 'n/name=' -- $argv
or return

Если $argv пусто, то нет ничего для анализа, и argparse возвращает ноль, чтобы указать на успех. Если $argv не пусто, проверяются флаги -h, --help, -n и --name. Если они найдены, они удаляются из аргументов, и локальные переменные (подробнее об этом в ниже) устанавливаются так, чтобы скрипт мог определить, какие опции были видны. Предполагая, что $argv не имеет ошибок, например, отсутствующего обязательного значения для опции, то argparse завершается с кодом состояния ноль. В противном случае он выводит соответствующие сообщения об ошибках в stderr и завершается с кодом состояния один.

Аргумент -- обязателен. Вы не должны включать никаких аргументов после --, но вы должны включить --. Например, это приемлемо:

set -l argv
argparse 'h/help' 'n/name' -- $argv

Но это не так:

set -l argv
argparse 'h/help' 'n/name' $argv

Первая -- определяет, как команда argparse надёжно разделяет спецификации опций и аргументы команды.

Спецификации опций

Каждая спецификация опции — это строка, состоящая из

  • Символа короткого флага (обязательный). Он должен быть буквенно-цифровым или "#". Символ "#" специальный и означает, что флаг в виде -123 является допустимым. Короткой флаг "#" должен следовать символ "-" (так как короткое имя иначе недопустимо, так как _flag_# — это недопустимое имя переменной) и должен следовать за именем длинного флага без модификаторов.
  • Символ /, если короткий флаг может быть использован при вызове вашей команды, или -, если его не следует использовать как допустимый короткий флаг. Если нет имени длинного флага, эти символы следует опустить. Вы также можете указать символ "#", чтобы указать, что короткие и длинные имена флага могут быть использованы, а значение может быть указано как неявное целое число; т.е., флаг в виде -NNN.
  • Имя длинного флага, необязательное. Если оно отсутствует, можно использовать только короткий символ флага.
  • Пустое значение, если флаг — булев и не требует аргумента или является неявным целым флагом, иначе
  • = если он требует значения и сохраняется только последнее вхождение флага, иначе
  • =? он принимает необязательное значение и сохраняется только последнее вхождение флага, иначе
  • =+ если он требует значения и сохраняется каждое вхождение флага.
  • Необязательно ! с последующим скриптом fish для проверки значения. Как правило, это будет функция для выполнения. Если возвращаемый код равен нулю, значение флага является допустимым. Если ненулевой, значение недействительное. Любые сообщения об ошибках должны выводиться в стандартный вывод (а не в стандартный поток ошибок). Подробности см. в разделе Проверка значений флагов.

См. команду fish_opt для более удобного, но более подробного способа создания спецификаций опций.

В следующих примерах, если флаг не встречается при анализе аргументов, соответствующая переменная _flag_X не будет установлена.

Проверка значений флагов

Часто требуется проверить, что предоставленное значение опции удовлетворяет определённым критериям. Например, что это действительное целое число в определённом диапазоне. Вы всегда можете сделать это после того, как argparse вернётся, но вы также можете попросить argparse выполнить проверку, выполнив произвольный скрипт fish. Для этого просто добавьте ! (восклицательный знак) затем скрипт fish для выполнения. При выполнении этого кода будут определены три переменные:

  • _argparse_cmd будет установлено в значение значения argparse --name.
  • _flag_name будет установлено в короткий или длинный флаг, который обрабатывается.
  • _flag_value будет установлено в значение, связанное с обрабатываемым флагом.

Если вы делаете это через функцию, она должна быть определена с флагом --no-scope-shadowing. В противном случае у неё не будет доступа к этим переменным.

Скрипт должен выводить сообщения об ошибках в стандартный вывод, а не в стандартный поток ошибок. Он должен возвращать статус 0, если значение флага допустимо, иначе ненулевой статус, чтобы указать, что оно недопустимо.

Fish поставляется с функцией _validate_int, которая принимает флаги --min и --max. Предположим, ваша команда принимает флаги -m или --max, и минимально допустимое значение равно 0, а максимальное — 5. Вы определите опцию так: m/max=!_validate_int --min 0 --max 5. По умолчанию, если вы просто вызываете _validate_int без этих флагов, будет проверено, является ли значение допустимым целым числом без ограничений на минимальное или максимальное допустимое значение.

Примеры OPTION_SPEC

Примеры OPTION_SPEC:

  • h/help означает, что как -h, так и --help допустимы. Флаг — булев и может использоваться более одного раза. Если используется любой из флагов, то _flag_h и _flag_help будут установлены со значением, равным количеству раз, когда был замечен любой из флагов.
  • h-help означает, что только --help допустим. Флаг — булев и может использоваться более одного раза. Если используется длинный флаг, то _flag_h и _flag_help будут установлены со значением, равным количеству раз, когда был замечен длинный флаг.
  • n/name= означает, что как -n, так и --name допустимы. Он требует значения и может использоваться не более одного раза. Если флаг виден, то _flag_n и _flag_name будут установлены с единственным обязательным значением, связанным с флагом.
  • n/name=? означает, что как -n, так и --name допустимы. Он принимает необязательное значение и может использоваться не более одного раза. Если флаг виден, то _flag_n и _flag_name будут установлены со значением, связанным с флагом, если оно было предоставлено; иначе оно будет установлено без значений.
  • n-name=+ означает, что только --name допустим. Он требует значения и может использоваться более одного раза. Если флаг виден, то _flag_n и _flag_name будут установлены со значениями, связанными с каждым вхождением флага.
  • x означает, что только -x допустим. Это булев флаг, который может использоваться более одного раза. Если он виден, то _flag_x будет установлен со значением, равным количеству раз, когда был замечен флаг.
  • x=, x=?, и x=+ аналогичны примерам n/name выше, но нет альтернативы длинного флага для короткого флага -x.
  • x- не допустим, так как нет имени длинного флага, и поэтому короткий флаг -x должен быть доступен.
  • #-max означает, что допустимы флаги, соответствующие регулярному выражению "^--?\d+$". При встрече они присваиваются переменной _flag_max. Это позволяет указывать любое допустимое положительное или отрицательное целое число, добавляя перед ним одиночный символ "-". Многие команды поддерживают этот приём. Например, head -3 /a/file для вывода только первых трёх строк из /a/file.
  • n::max означает, что допустимы флаги, соответствующие регулярному выражению "^--?\d+$". При встрече они присваиваются переменным _flag_n и _flag_max. Это позволяет указывать любое допустимое положительное или отрицательное целое число, добавляя перед ним одиночный символ "-". Многие команды поддерживают этот приём. Например, head -3 /a/file для вывода только первых трёх строк из /a/file. Вы также можете указать значение, используя любой из флагов: -n NNN или --max NNN в этом примере.

После анализа аргументов переменная argv устанавливается со значением области видимости локально для любых значений, которые ещё не были использованы при обработке флагов. Если нет не связанных значений, переменная устанавливается, но count $argv будет равно нулю.

Если при обработке argparse произойдёт ошибка, выполнение завершится с ненулевым статусом и будут выведены сообщения об ошибках в стандартный поток ошибок.

Примечания

До добавления этой встроенной команды в релизе 2.7.0 существовало два основных способа анализа аргументов, переданных в скрипт или функцию fish. Один способ — использовать предоставленную ОС команду getopt. Проблема в том, что реализации GNU и BSD несовместимы. Это затрудняет использование этой внешней команды, кроме как в простых ситуациях. Другой способ — перебирать $argv и использовать оператор fish switch для определения способа обработки аргумента. Однако это влечёт за собой большое количество шаблонного кода. Также практически невозможно реализовать такое же поведение, как у встроенных команд.

Вернуться к списку команд.

begin - начать новый блок кода

Синтаксис

begin; [COMMANDS...;] end

Описание

begin используется для создания нового блока кода.

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

Блок выполняется безусловно. begin; ...; end эквивалентно if true; ...; end.

begin не изменяет текущий статус выхода. После завершения блока $status будет установлено в статус, возвращённый последней командой.

Пример

Следующий код устанавливает ряд переменных внутри области видимости блока. Поскольку переменные устанавливаются внутри блока и имеют локальную область видимости, они автоматически удаляются при завершении блока.

begin
    set -l PIRATE Yarrr

    ...
end

echo $PIRATE
# This will not output anything, since the PIRATE variable
# went out of scope at the end of the block

В следующем коде весь вывод перенаправляется в файл out.html.

begin
    echo $xml_header
    echo $html_header
    if test -e $file
        ...
    end
    ...
end > out.html

Вернуться к списку команд.

bg - отправить задачи в фоновый режим

Синтаксис

bg [PID...]

Описание

bg отправляет задачи в фоновый режим, возобновляя их, если они приостановлены.

Задача в фоновом режиме выполняется одновременно с fish и не имеет доступа к клавиатуре. Если не указана ни одна задача, в фоновый режим отправляется последняя используемая задача. Если указан PID, задачи с указанными идентификаторами группы процессов отправляются в фоновый режим.

Когда хотя бы один из аргументов не является допустимым идентификатором задачи (например, PID), bg выведет ошибку, ничего не поместив в фоновый режим.

Когда все аргументы являются допустимыми идентификаторами задач, bg поместит все соответствующие существующие задачи в фоновый режим.

Пример

bg 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]
     [--preset | --user]
     [(-s | --silent)] [(-k | --key)] SEQUENCE COMMAND [COMMAND...]
bind [(-M | --mode) MODE] [(-k | --key)] [--preset] [--user] SEQUENCE
bind (-K | --key-names) [(-a | --all)] [--preset] [--user]
bind (-f | --function-names)
bind (-L | --list-modes)
bind (-e | --erase) [(-M | --mode) MODE]
     [--preset] [--user]
     (-a | --all | [(-k | --key)] SEQUENCE [SEQUENCE...])

Описание

bind добавляет привязку для указанной последовательности клавиш к указанной команде.

SEQUENCE — это последовательность символов, к которой нужно привязаться. Их следует записывать как последовательности экранирования fish. Например, поскольку нажатие клавиши Alt и другой символ отправляет этот символ с префиксом escape, привязки клавиш, основанные на Alt, можно записывать с помощью escape \e. Например, Alt-w можно записать как \ew. Символ управления можно записать аналогичным образом с использованием escape \c, например, Control-X (^X) можно записать как \cx. Обратите внимание, что привязки клавиш, основанные на Alt, чувствительны к регистру, а привязки клавиш, основанные на Ctrl, не чувствительны. Это ограничение текстовых терминалов, а не fish.

Значение по умолчанию для привязки клавиш можно задать, указав SEQUENCE, пустой строки (то есть ''). Оно будет использоваться, когда не срабатывает другая привязка. Для большинства привязок клавиш имеет смысл использовать функцию self-insert (т.е. bind '' self-insert ) в качестве значения по умолчанию. Это позволит вставлять в редактор любые нажатия клавиш, не имеющие явной привязки. Непечатаемые символы игнорируются редактором, поэтому это предотвратит вывод управляющих последовательностей.

Если используется переключатель -k, вместо последовательности используется имя клавиши (например, «вниз», «вверх» или «backspace»). Имена совпадают с соответствующими переменными curses, но без префикса «key_». (Дополнительную информацию см. в terminfo(5), или используйте bind --key-names, чтобы получить список всех доступных имен клавиш.) Если используется вместе с переключателем -s, bind будет игнорировать привязки к именованным клавишам, не найденным в termcap для текущего $TERMINAL, в противном случае будет выведено предупреждение.

COMMAND может быть любой командой fish, но также может быть одной из набора специальных функций ввода. Это включает функции перемещения курсора, работы с кольцом обмена, выполнения автодополнения и т. д. Полный список этих функций ввода см. в bind --function-names.

Если COMMAND — команда сценария оболочки, рекомендуется поместить фактический код в функцию и просто привязать к имени функции. Это значительно упрощает тестирование функции во время редактирования, а результат обычно более читаем.

Если скрипт выводит результат, он должен завершаться вызовом commandline -f repaint, чтобы сообщить fish, что необходимо перерисовать экран.

Если указано несколько COMMAND , они все выполняются в указанном порядке при нажатии клавиши. Обратите внимание, что специальные функции ввода не могут быть объединены с обычными командными сценариями оболочки. Команды должны быть либо последовательностью специальных функций ввода (из bind -f ), либо все командными сценариями оболочки (т. е., допустимым скриптом fish).

Если не указано SEQUENCE , будут выведены все привязки (или только привязки в указанном MODE ). Если SEQUENCE указано без COMMAND, будет выведена только привязка, соответствующая этой последовательности.

Для сохранения пользовательских привязок клавиш поместите операторы bind в config.fish. Кроме того, fish также автоматически выполнит функцию fish_user_key_bindings, если она существует.

Привязки клавиш могут использовать «режимы», имитирующие поведенческие особенности модального ввода Vi. По умолчанию режим — «default», и каждая привязка применяется к одному режиму. Режим можно просмотреть/изменить с помощью переменной $fish_bind_mode.

Доступны следующие параметры:

  • -k или --key Укажите имя клавиши, например, «влево» или «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
  • --preset и --user указывают, должны ли привязки работать с пользовательскими или предопределенными привязками. Пользовательские привязки имеют приоритет над предопределенными привязками, когда fish ищет соответствия. По умолчанию все вызовы bind работают на уровне «user», за исключением перечисления, которое покажет оба уровня. Все вызовы, кроме вставки новых привязок, могут работать на обоих уровнях одновременно. --preset следует использовать только в полных наборах привязок (например, при работе с fish_vi_key_bindings).

Специальные функции ввода

Доступны следующие специальные функции ввода:

  • 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, переместить следующее слово в кольцо обмена
  • pager-toggle-search, переключает поле поиска, если страница автодополнения видна.
  • suppress-autosuggestion, удалить текущее автоматическое предложение
  • swap-selection-start-stop, перейти к другому концу выделенного текста без изменения выделения
  • transpose-chars, поменять местами два символа слева от курсора
  • transpose-words, поменять местами два слова слева от курсора
  • upcase-word, сделать текущее слово заглавным
  • yank, вставить последнюю запись из кольца обмена в буфер
  • yank-pop, перейти к предыдущей записи в кольце обмена

Примеры

bind \cd 'exit'

Приводит к завершению fish при нажатии Control-D.

bind -k ppage history-search-backward

Выполняет поиск по истории при нажатии клавиши Page Up.

set -g fish_key_bindings fish_vi_key_bindings
bind -M insert \cc kill-whole-line force-repaint

Включает привязки клавиш Vi и переопределяет Control-C для очистки строки ввода.

Особые случаи: символ Escape

Символ Escape можно использовать самостоятельно, например, для перехода из режима вставки в обычный режим при использовании привязок клавиш Vi. Escape также можно использовать как «мета»-клавишу, чтобы обозначить начало последовательности escape, например, функции или стрелочных клавиш. Также можно определять пользовательские привязки, которые начинаются с символа Escape.

Fish ожидает некоторое время после получения символа Escape, чтобы определить, является ли он самостоятельным символом или частью последовательности escape. Во время ожидания дополнительные нажатия клавиш заставляют символ Escape вести себя как «мета»-клавиша. Если других нажатий клавиш не происходит, он обрабатывается как самостоятельный символ Escape. Время ожидания установлено в 300 миллисекунд (0,3 секунды) в стандартных привязках клавиш и 10 миллисекунд в привязках клавиш Vi. Его можно настроить, установив переменную fish_escape_delay_ms со значением от 10 до 5000 мс. Рекомендуется использовать эту универсальную переменную, которую вы устанавливаете один раз из интерактивной сессии.

Примечание: в fish 2.2.0 и более ранних версиях значение по умолчанию составляло 10 миллисекунд, и не было возможности его настроить. Это фактически делало невозможным использование Escape как «мета»-клавиши.

Вернуться к индексу команд.

block - временно заблокировать доставку событий

Синтаксис

block [OPTIONS...]

Описание

block предотвращает доставку и обработку событий, вызванных fish или командой emit, в то время, когда блок активен.

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

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

Блоки событий не следует путать с блоками кода, которые создаются с помощью begin, if, while или for.

Доступны следующие параметры:

  • -l или --local Автоматически снять блок в конце текущего внутреннего блока кода
  • -g или --global Никогда не снимать блок автоматически
  • -e или --erase Снять глобальный блок

Пример

# Create a function that listens for events
function --on-event foo foo; echo 'foo fired'; end

# Block the delivery of events
block -g

emit foo
# No output will be produced

block -e
# 'foo fired' will now be printed

Примечания

Обратите внимание, что события принимаются только от текущего процесса fish, так как нет возможности отправлять события из одного процесса fish в другой.

Вернуться к индексу команд.

break - остановить текущий внутренний цикл

Синтаксис

LOOP_CONSTRUCT; [COMMANDS...] break; [COMMANDS...] end

Описание

break останавливает текущий цикл, такой как цикл for или цикл while. Обычно он добавляется внутри условного блока, такого как оператор if или switch.

Для break параметров нет.

Пример

Следующий код ищет все файлы .c, содержащие «smurf», и останавливается при первом вхождении.

for i in *.c
    if grep smurf $i
        echo Smurfs are present in $i
        break
    end
end

Вернуться к индексу команд.

breakpoint - Запуск режима отладки

Краткое описание

breakpoint

Описание

breakpoint используется для остановки выполняемого скрипта и запуска интерактивного приглашения для отладки.

Для получения более подробной информации см. Отладка скриптов fish в руководстве fish.

Для breakpoint нет параметров.

Вернуться к индексу команд.

builtin - выполнение встроенной команды

Краткое описание

builtin BUILTINNAME [OPTIONS...]

Описание

builtin заставляет оболочку использовать встроенную команду вместо функции или программы.

Доступны следующие параметры:

  • -n или --names Список всех определенных встроенных команд

Пример

builtin jobs
# executes the jobs builtin, even if a function named jobs exists

Вернуться к индексу команд.

case - условное выполнение блока команд

Краткое описание

switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end

Описание

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

Каждая команда case получает один или несколько параметров. Первая команда case с параметром, соответствующим строке, указанной в команде switch, будет вычислена. case параметры могут содержать подстановочные знаки. Их необходимо экранировать или заключить в кавычки, чтобы избежать стандартной подстановки подстановочных знаков с использованием имён файлов.

Обратите внимание, что 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.

Если $animal было установлено в "banana", будет напечатано "Я не знаю, что такое банан".

Вернуться к индексу команд.

cd - изменение каталога

Краткое описание

cd [DIRECTORY]

Описание

cd изменяет текущий рабочий каталог.

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

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

Обратите внимание, что оболочка попытается изменить каталог без необходимости в cd, если имя каталога указано (начинается с ., / или ~, или заканчивается на /).

Fish также поставляет оболочку функции вокруг встроенной cd, которая понимает cd - как переход к предыдущему каталогу. См. также prevd. Эта функция-оболочка сохраняет историю 25 последних посещенных каталогов в глобальных переменных $dirprev и $dirnext. Если вы сделаете эти универсальные переменные, ваша история cd будет общей для всех экземпляров fish.

В качестве особого случая, cd . эквивалентно cd $PWD, что полезно в тех случаях, когда точка монтирования была переработана или каталог был удален и пересоздан.

Примеры

cd
# changes the working directory to your home directory.

cd /usr/src/fish-shell
# changes the working directory to /usr/src/fish-shell

См. также

См. также команду cdh для перехода в недавно посещенный каталог.

Вернуться к индексу команд.

cdh - переход в недавно посещённый каталог

Краткое описание

cdh [ directory ]

Описание

cdh без аргументов выводит список недавно посещенных каталогов. Вы можете выбрать один из записей по букве или номеру. Вы также можете нажать tab, чтобы использовать страницу завершения для выбора элемента из списка. Если вы передадите один аргумент, это эквивалентно cd directory.

Обратите внимание, что команда cd ограничивает историю каталогов 25 последними посещёнными каталогами. История хранится в переменных $dirprev и $dirnext, которые эта команда обрабатывает. Если вы сделаете эти универсальные переменные, ваша история cd будет общей для всех экземпляров fish.

См. также

См. также команды prevd и pushd, которые также работают с недавней историей cd и предоставлены для совместимости с другими оболочками.

Вернуться к индексу команд.

command - запуск программы

Краткое описание

command [OPTIONS] COMMANDNAME [ARGS...]

Описание

command заставляет оболочку выполнить программу COMMANDNAME и проигнорировать любые функции или встроенные команды с таким же именем.

Доступны следующие опции:

  • -a или --all возвращает все внешние команды, найденные в $PATH, в порядке их нахождения.
  • -q или --quiet, в сочетании с -s, выключает вывод и ничего не печатает, устанавливая только код завершения.
  • -s или --search возвращает имя внешней команды, которая будет выполнена, или ничего, если файл с указанным именем не был найден в $PATH.

С опцией -s, command рассматривает каждый аргумент как отдельную команду для поиска и устанавливает код завершения в 0, если любая из указанных команд была найдена, или 1, если никакие команды не были найдены. Кроме того, передача опции -q или --quiet предотвращает вывод каких-либо путей, например type -q, только для проверки кода завершения.

Для обеспечения совместимости с POSIX command, флаг -v распознается как псевдоним для -s.

Примеры

command ls заставляет fish выполнить программу ls, даже если существует функция ls.

command -s ls возвращает путь к программе ls.

command -sq git; and command git log выполняет git log только в том случае, если git существует.

Вернуться к индексу команд.

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 выбирает текущий процесс
  • -s или --current-selection выбирает текущий выбор
  • -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

(с курсором на букве "o" в слове "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]
        [( -k | --keep-order )]
        [( -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 добавляет указанные аргументы параметра в список автодополнений.
  • -k или --keep-order сохраняет порядок аргументов, указанных через -a или --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 распознает три стиля параметров, такие же, как и в библиотеке getopt GNU версии. Эти стили:

  • Короткие параметры, например, '-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 заставляют указанную команду унаследовать автодополнения от другой команды. Команда, наследующая автодополнения, называется «обёрнутой» командой, унаследованной от неё. У обёрнутой команды могут быть свои автодополнения помимо унаследованных. Команда может обёртывать несколько команд, а обёртывание является транзитивным: если A обёртывает B, а B обёртывает C, то A автоматически наследует все автодополнения C. Обёртывание можно удалить, используя параметры -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 и большинству встроенных команд fish, contains интерпретирует все аргументы, начинающиеся с -, как параметры contains, пока не достигнет аргумента, который равен -- (два дефиса). См. примеры ниже.

Пример

Если $animals — список животных, следующее проверит, содержит ли он кошку:

if contains cat $animals
   echo Your animal list is evil!
end

Этот код добавит некоторые директории в $PATH, если они ещё не включены:

for i in ~/bin /usr/local/bin
    if not contains $i $PATH
        set PATH $PATH $i
    end
end

В то время как это проверит, была ли команда hasargs запущена с параметром -q:

function hasargs
    if contains -- -q $argv
        echo '$argv contains a -q option'
    end
end

Здесь -- препятствует тому, чтобы contains рассматривал -q как параметр для себя. Вместо этого он рассматривает его как обычную строку для проверки.

Вернуться к списку команд.

continue - пропуск остальной части текущей итерации внутреннего цикла

Синтаксис

LOOP_CONSTRUCT; [COMMANDS...;] continue; [COMMANDS...;] end

Описание

continue пропускает остаток текущей итерации текущего внутреннего цикла, такого как цикл for или цикл while. Обычно он добавляется внутри условного блока, такого как оператор if или оператор switch.

Пример

Следующий код удаляет все файлы tmp, которые не содержат слово smurf.

for i in *.tmp
    if grep smurf $i
        continue
    end
    # This "rm" is skipped over if "continue" is executed.
    rm $i
    # As is this "echo"
    echo $i
end

Вернуться к списку команд.

count - подсчёт элементов массива

Синтаксис

count $VARIABLE

Описание

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

count не принимает никаких параметров, даже -h или --help.

count завершается с ненулевым кодом возврата, если ему не были переданы аргументы, и с нулевым, если было передано хотя бы один аргумент.

Пример

count $PATH
# Returns the number of directories in the users PATH variable.

count *.txt
# Returns the number of files in the current working directory ending with the suffix '.txt'.

Вернуться к списку команд.

dirh - вывод истории каталогов

Синтаксис

dirh

Описание

dirh выводит текущую историю каталогов. Текущая позиция в истории выделена цветом, определённым в переменной среды fish_color_history_current.

dirh не принимает никаких параметров.

Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещёнными каталогами. История сохраняется в переменных $dirprev и $dirnext.

Вернуться к списку команд.

dirs - вывод стека каталогов

Сводка

dirs
dirs -c

Описание

dirs выводит текущую стековую структуру каталогов, созданную командой pushd.

С опцией "-c" она очищает стековую структуру каталогов вместо этого.

dirs не принимает никаких параметров.

Вернуться к индексу команд.

disown - удалить процесс из списка задач

Сводка

disown [ PID ... ]

Описание

disown удаляет указанную задачу из списка задач. Сама задача продолжает существовать, но fish больше не отслеживает её.

Задачи в списке задач получают сигнал hang-up при завершении fish, что обычно приводит к завершению задачи; disown позволяет этим процессам продолжать работу независимо.

Если процесс не указан, удаляется последняя использованная задача (как bg и fg). Если указаны один или несколько PIDы, задачи с указанными идентификаторами процессов удаляются из списка задач. Неверные задачи игнорируются, и выводится предупреждение.

Если задача приостановлена, ей отправляется сигнал на продолжение работы, и выводится предупреждение. Использовать встроенную команду bg для продолжения задачи после её отсоединения невозможно.

disown возвращает 0, если все указанные задачи были успешно отсоединены, и 1, если возникли какие-либо проблемы.

Пример

firefox &; disown запустит веб-браузер Firefox в фоновом режиме и удалит его из списка задач, что означает, что он не будет закрыт при закрытии процесса fish.

disown (jobs -p) удаляет все задачи из списка задач без их завершения.

Вернуться к индексу команд.

echo - отобразить строку текста

Сводка

echo [OPTIONS] [STRING]

Описание

echo отображает строку текста.

Доступны следующие опции:

  • -n, Не выводить символ новой строки
  • -s, Не разделят аргументы пробелами
  • -E, Отключить интерпретацию обратных слэшей (по умолчанию)
  • -e, Включить интерпретацию обратных слэшей

Последовательности эскейпов

Если используется -e, распознаются следующие последовательности:

  • \ обратный слэш
  • \a сигнал тревоги (BEL)
  • \b возврат на один символ назад
  • \c не производить дальнейшую выдачу
  • \e escape
  • \f подача формы
  • \n новая строка
  • \r возврат каретки
  • \t горизонтальная табуляция
  • \v вертикальная табуляция
  • \0NNN байт с восьмеричным значением NNN (от 1 до 3 цифр)
  • \xHH байт с шестнадцатеричным значением HH (от 1 до 2 цифр)

Пример

echo 'Hello World'

Вывод hello world в stdout

echo -e 'Top\nBottom'

Вывод Top и Bottom на отдельных строках, используя последовательность эскейпов

Вернуться к индексу команд.

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

Примечания

Обратите внимание, что события отправляются только текущему процессу fish, так как нет способа отправлять события от одного процесса fish к другому.

Вернуться к индексу команд.

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 оценивает указанные параметры как команду. Если указано более одного параметра, все параметры будут объединены с помощью пробела в качестве разделителя.

Если вашей команде не нужен доступ к stdin, рассмотрите использование source вместо этого.

Пример

Следующий код вызовет команду 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, задача с указанным идентификатором группы переводится в фоновый режим.

Пример

fg переведет последнюю задачу в фоновый режим.

Вернуться к индексу команд.

fish - дружелюбная интерактивная оболочка

Сводка

fish [OPTIONS] [-c command] [FILE [ARGUMENTS...]]

Описание

fish это оболочка командной строки, написанная в основном с учётом интерактивного использования. Полное руководство доступно в формате HTML с помощью команды help внутри fish.

Доступны следующие опции:

  • -c или --command=COMMANDS оценить указанные команды вместо чтения из командной строки
  • -C или --init-command=COMMANDS оценить указанные команды после прочтения конфигурации, прежде чем выполнить команду, указанную в -c, или читать интерактивный ввод
  • -d или --debug-level=DEBUG_LEVEL указать уровень подробности fish. Большее число означает больший уровень подробности. Уровень по умолчанию равен 1.
  • -i или --interactive указать, что fish должен работать в интерактивном режиме
  • -l или --login указать, что fish должен работать как оболочка входа
  • -n или --no-execute не выполнять никаких команд, только выполнить синтаксическую проверку
  • -p или --profile=PROFILE_FILE при завершении fish выводить информацию о времени выполнения всех выполненных команд в указанный файл
  • -v или --version отобразить версию и завершить работу
  • -D или --debug-stack-frames=DEBUG_LEVEL указать, сколько стековых кадров отображать при записи сообщений отладки. Значение по умолчанию равно нулю. Значение 3 или 4 обычно достаточно, чтобы получить представление о том, как был достигнут данный вызов отладки, но вы можете указать значение до 128.
  • -f или --features=FEATURES включает один или несколько флагов функций (разделенных запятой). Это способ, которым fish ставит стадии изменений, которые могут сломать скрипты.

Код выхода fish, как правило, является кодом выхода последней команды в фоновом режиме. Если fish завершается из-за синтаксической ошибки, код выхода равен 127.

Вернуться к индексу команд.

fish_breakpoint_prompt - определить внешний вид строки команд при работе с командой `breakpoint`

Сводка

function fish_breakpoint_prompt
    ...
end

Описание

Определяя функцию fish_breakpoint_prompt, пользователь может выбрать пользовательский приглашающий текст при запросе ввода в ответ на команду breakpoint. Функция fish_breakpoint_prompt выполняется при отображении приглашающего текста, а результат используется как приглашающий текст.

Код выхода команд внутри fish_breakpoint_prompt не изменяет значение $status вне функции fish_breakpoint_prompt.

fish поставляется с вариантом по умолчанию этой функции, который отображает имя функции и номер строки текущего контекста выполнения.

Пример

Простой приглашающий текст, являющийся упрощенной версией приглашающего текста по умолчанию для отладки:

function fish_breakpoint_prompt -d "Write out the debug prompt"
    set -l function (status current-function)
    set -l line (status current-line-number)
    set -l prompt "$function:$line >"
    echo -ns (set_color $fish_color_status) \ (set_color normal)
end

Вернуться к индексу команд.

fish_config - запустить веб-интерфейс конфигурации

Описание

fish_config запускает веб-интерфейс конфигурации.

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

fish_config запускает локальный веб-сервер и затем открывает окно веб-браузера; после завершения работы закройте окно браузера, а затем нажмите клавишу Enter, чтобы завершить сеанс конфигурации.

fish_config необязательно принимает имя начальной вкладки конфигурации. Например, fish_config history запустит интерфейс конфигурации с вкладкой истории.

Если переменная среды BROWSER установлена, она будет использована в качестве имени веб-браузера для открытия вместо системного значения по умолчанию.

Пример

fish_config открывает новое окно веб-браузера и позволяет настроить определённые настройки fish.

Вернуться к списку команд.

fish_indent - инструмент форматирования и отступа

Синтаксис

fish_indent [OPTIONS]

Описание

fish_indent используется для форматирования отступов кода fish. fish_indent считывает команды со стандартного ввода и выводит их на стандартный вывод или в указанный файл.

Доступны следующие параметры:

  • -w или --write форматируют указанный файл и немедленно записывают его в этот файл.
  • -i или --no-indent не форматируют команды, а только переформатируют их на одну строку.
  • -v или --version отображает текущую версию fish и затем завершает работу.
  • --ansi форматирует вывод с помощью последовательностей ANSI-экрана, подходящих для текущего $TERM, используя цвета, определенные в среде (например, $fish_color_command).
  • --html выводит HTML, который поддерживает подсветку синтаксиса, если определён соответствующий CSS. Имена классов CSS совпадают с именами переменных, таких как fish_color_command.
  • -d или --debug-level=DEBUG_LEVEL включает отладочный вывод и задаёт уровень подробности (например, fish -d). По умолчанию 0.
  • -D или --debug-stack-frames=DEBUG_LEVEL задаёт количество кадров стека для отображения при записи сообщений отладки. По умолчанию ноль. Значение 3 или 4 обычно достаточно, чтобы получить представление о том, как был достигнут конкретный вызов отладки, но вы можете указать значение до 128.
  • --dump-parse-tree выводит информацию об обработанных утверждениях в стандартный поток ошибок. Вероятно, это будет интересно только тем, кто работает над исходным кодом fish.

Вернуться к списку команд.

fish_key_reader - изучение символов, отправляемых клавишами клавиатуры

Синтаксис

fish_key_reader [OPTIONS]

Описание

fish_key_reader используется для изучения входных данных, полученных из терминала, и может помочь с назначением горячих клавиш. Программа интерактивная и работает со стандартным вводом. Отображаются отдельные символы и их шестнадцатеричные значения.

Инструмент запишет пример команды bind на стандартный вывод, соответствующей последовательности символов, захваченных. Если последовательность символов соответствует имени специальной клавиши (см. bind --key-names), будут показаны оба способа использования bind CHARS ... и bind -k KEYNAME .... Дополнительные сведения о полученных символах, например, задержка между символами, выводятся в стандартный поток ошибок.

Доступны следующие параметры:

  • -c или --continuous запускает сеанс, в котором можно просмотреть несколько последовательностей нажатий клавиш. По умолчанию программа завершает работу после захвата одной последовательности нажатий клавиш.
  • -d или --debug-level=DEBUG_LEVEL включает отладочный вывод и устанавливает уровень подробности (как fish -d). По умолчанию 0.
  • -D или --debug-stack-frames=DEBUG_LEVEL задаёт количество кадров стека для отображения при записи сообщений отладки. По умолчанию ноль. Значение 3 или 4 обычно достаточно, чтобы получить представление о том, как был достигнут конкретный вызов отладки, но вы можете указать значение до 128.
  • -h или --help выводит информацию об использовании.
  • -v или --version печатает версию fish_key_reader и завершает работу.

Примечания по использованию

Задержка в миллисекундах с момента получения предыдущего символа включена в диагностическую информацию, записанную в стандартный поток ошибок. Эта информация может быть полезна для определения оптимального значения fish_escape_delay_ms или ознакомления с задержкой, вносимой такими инструментами, как ssh, mosh или tmux.

fish_key_reader преднамеренно отключает обработку многих сигналов. Для завершения работы fish_key_reader в режиме --continuous выполните:

  • дважды нажмите Ctrl-C, или
  • дважды нажмите Ctrl-D, или
  • напишите exit, или
  • напишите quit

Вернуться к списку команд.

fish_mode_prompt - определение внешнего вида индикатора режима

Синтаксис

Функция fish_mode_prompt выведет индикатор режима для использования в режиме vi.

Описание

По умолчанию функция fish_mode_prompt выведет индикаторы текущего режима редактора Vi, отображаемые слева от обычной подсказки. Определите собственную функцию для настройки внешнего вида индикатора режима. Вы также можете определить пустую функцию fish_mode_prompt для удаления индикаторов режима Vi. Функция $fish_bind_mode variable может быть использована для определения текущего режима. Он будет одним из default, insert, replace_one, или visual.

Пример

function fish_mode_prompt
  switch $fish_bind_mode
    case default
      set_color --bold red
      echo 'N'
    case insert
      set_color --bold green
      echo 'I'
    case replace_one
      set_color --bold green
      echo 'R'
    case visual
      set_color --bold brmagenta
      echo 'V'
    case '*'
      set_color --bold red
      echo '?'
  end
  set_color normal
end

Вывод нескольких строк не поддерживается в fish_mode_prompt.

Вернуться к списку команд.

fish_opt - создание спецификации опции для команды argparse

Синтаксис

fish_opt [ -h | --help ]
fish_opt ( -s X | --short=X ) [ -l LONG | --long=LONG ] [ --long-only ] \ 
    [ -o | --optional-val ] [ -r | --required-val ] [ --multiple-vals ]

Описание

Эта команда предоставляет способ создания спецификаций опций, подходящих для использования с командой argparse. Конечно, вы можете написать спецификации опций вручную без использования этой команды. Но вы можете предпочесть использовать её для большей ясности.

Доступны следующие параметры argparse:

  • -s или --short принимает одиночную букву, используемую в качестве короткого флага в определяемой опции. Этот параметр обязателен.
  • -l или --long принимает строку, используемую в качестве длинного флага в определяемой опции. Этот параметр необязателен и не имеет значения по умолчанию. Если длинный флаг не определён, при разборе аргументов с помощью спецификации опции будет разрешён только короткий флаг.
  • --long-only означает, что определяемая спецификация опции будет допускать использование только имени длинного флага. Короткое имя флага все ещё должно быть определено (т. е. --short должно быть указано), но оно не может быть использовано при разборе аргументов с использованием этой спецификации опции.
  • -o или --optional означает, что определяемая опция может принимать значение, но это значение необязательно, а не обязательное. Если опция встречается более одного раза при разборе аргументов, сохраняется только последнее встреченное значение. Это означает, что переменная флага, созданная командой argparse, будет иметь ноль элементов, если не было указано значение опции, в противном случае она будет содержать ровно один элемент.
  • -r или --required означает, что определяемая опция требует значения. Если опция встречается более одного раза при разборе аргументов, сохраняется только последнее встреченное значение. Это означает, что переменная флага, созданная командой argparse, будет содержать ровно один элемент.
  • --multiple-vals означает, что определяемая опция требует значения каждый раз, когда она встречается. Каждый экземпляр хранится. Это означает, что переменная флага, созданная командой argparse, будет иметь один элемент для каждого экземпляра этой опции в аргументах.
  • -h или --help выводит справку по использованию этой команды.

Примеры

Определение одной спецификации опции для логического флага help:

set -l options (fish_opt -s h -l help)
argparse $options -- $argv

То же самое, но со вторым флагом, который требует значения:

set -l options (fish_opt -s h -l help)
set options $options (fish_opt -s m -l max --required-val)
argparse $options -- $argv

То же самое, но с третьим флагом, который можно указывать несколько раз, сохраняя значение каждого экземпляра и используемый только длинный флаг (--token) :

set -l options (fish_opt --short=h --long=help)
set options $options (fish_opt --short=m --long=max --required-val)
set options $options (fish_opt --short=t --long=token --multiple-vals --long-only)
argparse $options -- $argv

Вернуться к списку команд.

fish_prompt - определение внешнего вида приглашения командной строки

Синтаксис

function fish_prompt
    ...
end

Описание

Определяя функцию fish_prompt, пользователь может выбрать настраиваемое приглашение. Функция fish_prompt выполняется при отображении приглашения, а вывод используется в качестве приглашения.

Код команд внутри fish_prompt не изменяет значение $status за пределами функции fish_prompt.

fish поставляется с несколькими примерами приглашений, которые можно выбрать с помощью команды fish_config.

Пример

Простое приглашение:

function fish_prompt -d "Write out the prompt"
    printf '%s@%s%s%s%s> ' (whoami) (hostname | cut -d . -f 1) \ 
            (set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
end

Вернуться к списку команд.

fish_right_prompt - определение внешнего вида правого приглашения командной строки

Синтаксис

function fish_right_prompt
    ...
end

Описание

fish_right_prompt аналогичен fish_prompt, за исключением того, что он появляется справа в окне терминала.

Многострочный вывод не поддерживается в fish_right_prompt.

Пример

Простое правое приглашение:

function fish_right_prompt -d "Write out the right prompt"
    date '+%m/%d/%y'
end

Вернуться к списку команд.

fish_update_completions - обновление дополнений с помощью руководств

Описание

fish_update_completions анализирует руководства, установленные в системе, и пытается создать файлы дополнений в каталоге конфигурации fish.

Это не перезаписывает пользовательские дополнения.

У команды fish_update_completions нет параметров.

Вернуться к списку команд.

fish_vi_mode - включение режима vi

Синтаксис

fish_vi_mode

Описание

Эта функция устарела. Пожалуйста, используйте fish_vi_key_bindings directly

fish_vi_mode входит в режим редактирования команд, похожий на vi. Чтобы всегда начинать в режиме vi, добавьте fish_vi_mode в свой файл config.fish.

Вернуться к списку команд.

for - выполнение набора команд несколько раз.

Синтаксис

for VARNAME in [VALUES...]; COMMANDS...; end

Описание

for — это цикл. Он выполнит команды, указанные в COMMANDS, несколько раз. На каждой итерации локальная переменная, указанная в VARNAME, получает новое значение из VALUES. Если VALUES пусто, COMMANDS не будет выполнено вообще. Переменная VARNAME доступна после завершения цикла и будет содержать последнее присвоенное ей значение. Если VARNAME ещё не существует, она будет создана в локальной области видимости. В наших целях, если блок for находится внутри функции, должна существовать локальная переменная с таким же именем. Если блок for не вложен в функцию, будут использоваться глобальные и универсальные переменные с таким же именем, если они существуют.

Пример

for i in foo bar baz; echo $i; end

# would output:
foo
bar
baz

Примечания

Переменная VARNAME в версиях до 3.0.0 была локальной для блока for. Это означает, что если вы сделали что-то подобное:

for var in a b c
    if break_from_loop
        break
    end
end
echo $var

Последнее значение, присвоенное var при завершении цикла, не будет доступно вне цикла. То, что echo $var выведет, зависело от того, чему оно было равно до начала цикла. Вероятно, ничего.

Вернуться к списку команд.

funced - интерактивное редактирование функции

Синопсис

funced [OPTIONS] NAME

Описание

funced предоставляет интерфейс для редактирования определения функции NAME.

Если переменная окружения $VISUAL установлена, она будет использоваться в качестве программы для редактирования функции. Если $VISUAL не установлена, но $EDITOR установлена, то будет использоваться последняя. В противном случае будет использоваться встроенный редактор. Обратите внимание, что для ввода символа перевода строки в встроенном редакторе необходимо нажать Alt-Enter. Нажатие Enter означает завершение редактирования функции. Это не относится к внешним редакторам, таким как emacs или vim.

Если функция с именем NAME не существует, будет создана новая функция с указанным именем

  • -e command или --editor command Откройте тело функции в текстовом редакторе, указанном командой (например, -e vi). Специальная команда fish будет использовать встроенный редактор (то же самое, что и указание -i).
  • -i или --interactive Вынужденное открытие тела функции в встроенном редакторе даже если $VISUAL или $EDITOR определены.
  • -s или --save Автоматически сохранить функцию после успешного редактирования.

Вернуться к списку команд.

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. Вместо PID, для совместимости со старыми версиями, можно указать "`%self`", как псевдоним для $fish_pid, и функция будет запущена при завершении текущего экземпляра fish.
  • -s или --on-signal SIGSPEC сообщает fish о запуске этой функции при получении сигнала SIGSPEC. SIGSPEC может быть номером сигнала или именем сигнала, например SIGHUP (или просто HUP).
  • -S или --no-scope-shadowing позволяет функции получить доступ к переменным вызывающих функций. Обычно любые переменные внутри функции, имеющие такое же имя, что и переменные из вызывающей функции, «затеняются», и их содержимое независимо от вызывающей функции.
  • -V или --inherit-variable NAME сохраняет текущее значение переменной NAME и определяет локальную переменную с тем же именем и значением при определении функции. Это похоже на замыкание в других языках, таких как Python, но немного отличается. Обратите внимание на слово «снимок» в первом предложении. Если вы измените значение переменной после определения функции, даже если вы сделаете это в той же области (обычно в другой функции), новое значение не будет использоваться созданной функцией. См. пример function notify ниже, чтобы узнать, как это можно использовать.

Если пользователь введёт дополнительные аргументы после функции, они будут добавлены в массив переменных переменных $argv. Если указана опция --argument-names, аргументы также присваиваются именам, указанным в этой опции.

Используя переключатели обработчиков событий, функцию можно запустить автоматически в определённые моменты. Пользователь может создавать новые события с помощью встроенной команды emit. Fish генерирует следующие именованные события:

  • fish_prompt, которое генерируется всякий раз, когда оболочка fish собирается отобразить новое приглашение.
  • fish_command_not_found, которое генерируется всякий раз, когда поиск команды завершился неудачей.
  • fish_preexec, которое генерируется непосредственно перед выполнением интерактивной команды. Командная строка передаётся в качестве первого параметра.

    Примечание: Это событие будет сгенерировано даже если команда неверна. Параметр командной строки включает всю командную строку в точности, и может потенциально содержать новые строки.

  • fish_postexec, которое генерируется сразу после выполнения интерактивной команды. Командная строка передаётся в качестве первого параметра.

    Примечание: Это событие будет сгенерировано даже если команда неверна. Параметр командной строки включает всю командную строку в точности, и может потенциально содержать новые строки.

  • fish_exit генерируется непосредственно перед завершением fish.

Пример

function ll
    ls -l $argv
end

выполнит команду ls, используя опцию -l, передавая любые дополнительные файлы и переключатели команде ls.

function mkdir -d "Create a directory and set CWD"
    command mkdir $argv
    if test $status = 0
        switch $argv[(count $argv)]
            case '-*'

            case '*'
                cd $argv[(count $argv)]
                return
        end
    end
end

Это выполнит команду mkdir, и если она успешно выполнится, то установит текущую рабочую директорию в только что созданную.

function notify
    set -l job (jobs -l -g)
    or begin; echo "There are no jobs" >&2; return 1; end

    function _notify_job_$job --on-job-exit $job --inherit-variable job
        echo -n \a ## beep
        functions -e _notify_job_$job
    end
end

Это выведет звуковой сигнал при завершении последней задачи.

Примечания

Обратите внимание, что события принимаются только от текущего процесса fish, так как нет возможности отправлять события из одного процесса fish в другой.

Вернуться к списку команд.

functions - вывод или удаление функций

Синопсис

functions [ -a | --all ] [ -n | --names ]
functions [ -D | --details ] [ -v ] FUNCTION
functions -c OLDNAME NEWNAME
functions -d DESCRIPTION FUNCTION
functions [ -e | -q ] FUNCTIONS...

Описание

functions выводит или удаляет функции.

Доступны следующие опции:

  • -a или --all отображает все функции, включая те, имена которых начинаются с нижнего подчёркивания.
  • -c OLDNAME NEWNAME или --copy OLDNAME NEWNAME создаёт новую функцию с именем NEWNAME, используя определение функции OLDNAME.
  • -d DESCRIPTION или --description=DESCRIPTION изменяет описание функции.
  • -e или --erase удаляет указанные функции.
  • -D или --details отображает путь к определению или автозагрузке каждой функции, stdin если функция определена интерактивно или в командной строке или из стандартного ввода, и 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 делает вывод более подробным.
  • -H или --handlers отображает все обработчики событий.
  • -t или --handlers-type TYPE отображает все обработчики событий соответствующего типа.

По умолчанию 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 ] [ -R | --reverse ] [ "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. Элементы упорядочены по убыванию времени ввода, если не использовать флаг --reverse. Если вывод подключен к tty, функция history перенаправит его через ваш pager. Встроенная команда history просто выводит результаты на стандартный вывод.
  • delete удаляет элементы истории. Без опций --prefix или --contains, будет удалено точное совпадение указанного текста. Если не указать --exact, будет выведено сообщение, спрашивающее, какие записи нужно удалить. Вы можете ввести слово «all» для удаления всех совпадающих записей. Вы можете ввести один идентификатор (число в квадратных скобках), чтобы удалить только эту запись. Вы можете ввести несколько идентификаторов, разделенных пробелом, чтобы удалить несколько записей. Просто нажмите [enter], чтобы ничего не удалять. Обратите внимание, что интерактивное поведение удаления — это функция history, а встроенная команда history поддерживает только удаление --exact --case-sensitive.
  • merge немедленно учитывает изменения в истории из других сеансов. Обычно fish игнорирует изменения в истории из сеансов, запущенных после текущего. Эта команда применяет эти изменения немедленно.
  • save немедленно записывает все изменения в файл истории. Оболочка автоматически сохраняет файл истории; эта опция предназначена для внутреннего использования и обычно не должна использоваться пользователем.
  • clear очищает файл истории. Прежде чем удалить историю, отображается сообщение, спрашивающее, действительно ли вы хотите очистить всю историю, если не использовать builtin history.

Доступны следующие опции:

Эти флаги могут появляться перед или сразу после одной из перечисленных выше подкоманд.

  • -C или --case-sensitive выполняют поиск, учитывая регистр. По умолчанию регистр не учитывается. Обратите внимание, что до fish 2.4.0 по умолчанию регистр учитывался.
  • -c или --contains выполняют поиск или удаление элементов в истории, содержащих указанную строку. Это значение по умолчанию для флага --search. В настоящее время это не поддерживается подкомандой delete.
  • -e или --exact выполняют поиск или удаление элементов в истории, которые точно совпадают с указанной строкой. Это значение по умолчанию для подкоманды delete. По умолчанию регистр не учитывается. Если вам действительно нужен точный поиск с учётом регистра, используйте флаги -C или --case-sensitive.
  • -p или --prefix выполняют поиск или удаление элементов в истории, которые начинаются с указанной строки. В настоящее время это не поддерживается подкомандой --delete.
  • -t или --show-time добавляет дату и время записи к каждому элементу истории. По умолчанию используется формат strftime # cn. Вы можете указать другой формат; например, --show-time="%Y-%m-%d %H:%M:%S " или --show-time="%a%I%p". Короткий вариант -t не принимает строку формата strftime; он использует только формат по умолчанию. Допускается любой формат strftime, включая s для получения исходных UNIX-секунд с начала эпохи.
  • -z или --null приводит к тому, что записи в истории, созданные операциями поиска, завершаются символом NUL, а не новой строкой. Это позволяет обработчику read -z корректно обрабатывать многострочные записи истории.
  • -<number> -n <number> или --max=<number> ограничивает соответствующие элементы истории первыми «n» совпадающими записями. Это справедливо только для history search.
  • -R или --reverse упорядочивает результаты поиска истории в порядке возрастания времени записи. Это порядок, используемый большинством оболочек. По умолчанию используется обратный порядок.
  • -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 separated by a space.

Настройка имени файла истории

По умолчанию интерактивные команды записываются в $XDG_DATA_HOME/fish/fish_history (обычно ~/.local/share/fish/fish_history).

Вы можете установить переменную fish_history на другое имя для текущего сеанса оболочки. Значение по умолчанию (когда переменная не установлена) — fish, которое соответствует $XDG_DATA_HOME/fish/fish_history. Если вы установите её, например, в fun, история будет записываться в $XDG_DATA_HOME/fish/fun_history. Пустая строка означает, что история вообще не будет сохраняться. Это похоже на функции частного сеанса в веб-браузерах.

Вы можете изменить fish_history в любое время (используя set -x fish_history "session_name"), и это изменение вступит в силу сразу. Если вы установите его в "default", она будет использовать имя сеанса по умолчанию (который равен "fish").

Другие оболочки, такие как bash и zsh, используют переменную HISTFILE для подобных целей. Fish использует другое имя, чтобы избежать конфликтов и указать, что поведение отличается (имя сеанса вместо пути к файлу). Кроме того, если вы установите переменную в значение, отличное от fish или default, это предотвратит импорт истории bash. Это связано с тем, что наиболее распространённый случай использования этой функции — предотвращение утечки личной или конфиденциальной истории при выступлении.

Примечания

Если вы укажете и --prefix, и --contains, будет использоваться последний заданный флаг.

Обратите внимание, что для обратной совместимости каждую подкоманду также можно указать в виде длинной опции. Например, вместо history search можно набрать 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 принимает следующие переключатели:

  • -c или --command выводит имя команды для каждого процесса в заданиях.
  • -g или --group выводит только идентификатор группы каждой задачи.
  • -l или --last выводит только последнюю запущенную задачу.
  • -p или --pid выводит идентификатор процесса для каждого процесса во всех заданиях.
  • -q или --quiet не выводит ничего, чтобы оценить задания только по коду возврата.

В системах, поддерживающих эту функцию, jobs выведет использование процессора каждой задачи с момента выполнения последней команды. Использование процессора выражается в процентах от полной активности процессора. Обратите внимание, что в многопроцессорных системах общая активность может быть больше 100%.

Код возврата встроенной команды jobs равен 0, если есть запущенные фоновые задачи, и 1, в противном случае.

Без вывода.

Пример

jobs выводит сводку текущих задач.

Вернуться к списку команд.

math - Вычисления

Краткое описание

math [-sN | --scale=N] [--] EXPRESSION

Описание

math используется для выполнения математических вычислений. Он поддерживает все обычные операции, такие как сложение, вычитание и т. д. А также функции, такие как abs(), sqrt() и log2().

По умолчанию результат выводится в формате с плавающей точкой с обрезкой конечных нулей. Чтобы получить фиксированное представление, можно использовать опцию --scale, включая --scale=0 для целочисленного результата.

Обратите внимание, что расширение параметров происходит до оценки выражений. Это может быть очень полезно для выполнения вычислений, связанных с переменными оболочки или результатами подстановки команд, но это также означает, что скобки и символ подстановки * должны быть экранированы или заключены в кавычки.

math игнорирует пробелы между аргументами и принимает входные данные как несколько аргументов (внутри объединяемые пробелом), поэтому math 2 +2 и math "2 + 2" работают одинаково. math 2 2 — это ошибка.

Доступны следующие параметры:

  • -sN или --scale=N устанавливает масштаб результата. N должен быть целым числом. Масштаб, равный нулю, округляет результаты до ближайшего целого числа. Таким образом, 3/2 возвращает 1, а не 2, которое 1.5 обычно округлило бы. Это для совместимости с bc, на котором базировалась эта команда до fish 3.0.0. Значения масштаба, больше нуля, округляют результат по обычным правилам до указанного числа десятичных знаков.

Значения возврата

Если выражение успешно вычислено и не приводит к переполнению/потере точности или возвращает NaN, то значение возврата status равно нулю (успех), иначе — единице.

Синтаксис

math знает некоторые операторы, константы, функции и, очевидно, умеет читать числа.

Для чисел символ разделителя радикса . всегда является точкой, независимо от локали — 2.5, а не 2,5. Также доступен научный формат записи (10e5).

Операторы

math знает следующие операторы:

  • + для сложения и - для вычитания.
  • * для умножения, / для деления.
  • ^ для возведения в степень.
  • % для вычисления остатка от деления.
  • ( и ) для группировки.

Все они используются в инфиксной форме — 5 + 2, а не + 5 2.

Константы

math знает следующие константы:

  • e — число Эйлера.
  • pi — Известная константа. Половина числа Тау. (Тау не реализовано)

Используйте их без ведущего $ — pi - 3 должно быть около 0.

Функции

math поддерживает следующие функции:

  • abs
  • acos
  • asin
  • atan
  • atan2
  • ceil
  • cos
  • cosh
  • exp — экспоненциальная функция по основанию е
  • fac — факториал
  • floor
  • ln
  • log или log10 — логарифм по основанию 10
  • ncr
  • npr
  • pow(x,y) возвращает x в степени y (и может быть записано как x ^ y)
  • round — округление к ближайшему целому числу, удаляясь от 0
  • sin
  • sinh
  • sqrt
  • tan
  • tanh

Все тригонометрические функции используют радианы.

Примеры

math 1+1 выводит 2.

math $status - 128 выводит числовой код выхода последней команды минус 128.

math 10 / 6 выводит 1.666667.

math -s0 10.0 / 6.0 выводит 1.

math -s3 10 / 6 выводит 1.666.

math "sin(pi)" выводит 0.

Примечания по совместимости

В релизах Fish 1.x и 2.x для обработки математических выражений использовалась команда bc. Начиная с fish 3.0.0, fish использует библиотеку tinyexpr и оценивает выражение без участия внешних команд.

Не нужно использовать -- перед выражением, даже если оно начинается с минуса, который в противном случае мог бы быть интерпретирован как неверный параметр. Если вы добавите -- перед выражением, это остановит сканирование параметров, как и для любой другой команды, и оно не будет частью выражения.

Назад в индекс команд.

nextd - перемещение вперёд по истории каталогов

Синтаксис

nextd [ -l | --list ] [POS]

Описание

nextd перемещает вперёд на POS позиций в истории посещённых каталогов; если достигнут конец истории, выводится предупреждение.

Если указан флаг -l или --list, отображается текущая история каталогов.

Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещёнными каталогами. История хранится в переменных $dirprev и $dirnext, которые эта команда изменяет.

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

Пример

cd /usr/src
# Working directory is now /usr/src

cd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell

prevd
# Working directory is now /usr/src

nextd
# Working directory is now /usr/src/fish-shell

Назад в индекс команд.

not - инвертировать код выхода задания

Синтаксис

not COMMAND [OPTIONS...]

Описание

not инвертирует код выхода другой команды. Если код выхода равен нулю, not возвращает 1. В противном случае, not возвращает 0.

Пример

Следующий код сообщает об ошибке и завершает работу, если не найден файл с именем spoon.

if not test -f spoon
    echo There is no spoon
    exit 1
end

Назад в индекс команд.

open - открыть файл в его по умолчанию приложении

Синтаксис

open FILES...

Описание

open открывает файл в его по умолчанию приложении, используя соответствующий инструмент для операционной системы. В GNU/Linux для этого требуется общая, но необязательная утилита xdg-open, из пакета xdg-utils.

Обратите внимание, что эта функция не будет использоваться, если существует команда с таким именем (что происходит на macOS или Haiku).

Пример

open *.txt открывает все текстовые файлы в текущей директории с помощью по умолчанию текстового редактора вашей системы.

Назад в индекс команд.

or - условное выполнение команды

Синтаксис

COMMAND1; or COMMAND2

Описание

or используется для выполнения команды, если предыдущая команда была неуспешной (возвратила статус, отличный от 0).

Выражения or могут использоваться в качестве части условия в блоке and или while. См. документацию для if и while для примеров.

or не изменяет текущий код выхода сам по себе, но команда, которую он выполняет, скорее всего, изменит. Код выхода последней выполненной фоновой команды всегда можно получить, используя переменную $status.

Пример

Следующий код выполняет команду make для сборки программы. Если сборка успешна, программа устанавливается. Если любой из шагов завершился неудачно, выполняется make clean, который удаляет файлы, созданные процессом сборки.

make; and make install; or make clean

Назад в индекс команд.

popd - перемещение по стеку каталогов

Синтаксис

popd

Описание

popd удаляет верхний каталог из стека каталогов и изменяет текущую рабочую директорию на новый верхний каталог. Используйте pushd для добавления каталогов в стек.

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

Пример

pushd /usr/src
# Working directory is now /usr/src
# Directory stack contains /usr/src

pushd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell
# Directory stack contains /usr/src /usr/src/fish-shell

popd
# Working directory is now /usr/src
# Directory stack contains /usr/src

Назад в индекс команд.

prevd - перемещение назад по истории каталогов

Синтаксис

prevd [ -l | --list ] [POS]

Описание

prevd перемещает назад на POS позиций в истории посещённых каталогов; если достигнут начало истории, выводится предупреждение.

Если указан флаг -l или --list, отображается текущая история.

Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещёнными каталогами. История хранится в переменных $dirprev и $dirnext которые эта команда изменяет.

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

Пример

cd /usr/src
# Working directory is now /usr/src

cd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell

prevd
# Working directory is now /usr/src

nextd
# Working directory is now /usr/src/fish-shell

Назад в индекс команд.

printf - вывод текста в соответствии с форматом строки

Синтаксис

printf format [argument...]

Описание

printf форматирует строку FORMAT с аргументом ARGUMENT и выводит результат.

Строка FORMAT должна содержать спецификаторы формата, каждый из которых заменяется последующим аргументом в соответствии со спецификатором. Спецификаторы подробно описаны ниже и взяты из функции printf(3) библиотеки C.

В отличие от 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 управляющий символ
  • \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 | --fifo] [-f | --file] [-s SUFFIX])

Описание

Некоторые оболочки (например, ksh, bash) имеют синтаксис, который является смесью подстановки команды и конвейеризации, называемой подстановкой процесса. Она используется для отправки вывода команды в вызывающую команду, так же как и подстановка команды, но с той разницей, что вывод отправляется не через аргументы командной строки, а через именованную трубу, а имя именованной трубы отправляется как аргумент вызывающей программе. psub в сочетании с обычной подстановкой команды обеспечивает ту же функциональность.

Доступны следующие параметры:

  • -f или --file приведет к тому, что psub будет использовать обычный файл вместо именованной трубы для связи с вызывающим процессом. Это приведет к тому, что psub будет значительно медленнее при работе с большими объемами данных, но имеет преимущество, что процесс чтения может выполнять поиск в потоке. Это поведение по умолчанию.
  • -F или --fifo приведет к тому, что psub будет использовать именованную трубу вместо файла. Используйте это только в том случае, если команда генерирует не более 8 КБ вывода. Предел буферизации данных FIFO варьируется в зависимости от ОС, но обычно составляет 8 КБ, 16 КБ или 64 КБ. Если вы используете этот параметр, а команда слева от конвейера psub генерирует больше вывода, высока вероятность возникновения тупиковой ситуации.
  • -s или --suffix добавьте SUFFIX к имени файла.

Пример

diff (sort a.txt | psub) (sort b.txt | psub)
# shows the difference between the sorted versions of files `a.txt` and `b.txt`.

source-highlight -f esc (cpp main.c | psub -f -s .c)
# highlights `main.c` after preprocessing as a C source.

Вернуться к списку команд.

pushd - поместить директорию в стек каталогов

Синтаксис

pushd [DIRECTORY]

Описание

Функция pushd добавляет DIRECTORY в начало стека каталогов и делает его текущей рабочей директорией. popd вытащит её из стека и вернёт в исходную директорию.

Без аргументов она меняет верхние две директории в стеке.

pushd +NUMBER вращает стек против часовой стрелки, т.е. снизу вверх

pushd -NUMBER вращает по часовой стрелке, т.е. сверху вниз.

См. также dirs и dirs -c.

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

Пример

pushd /usr/src
# Working directory is now /usr/src
# Directory stack contains /usr/src

pushd /usr/src/fish-shell
# Working directory is now /usr/src/fish-shell
# Directory stack contains /usr/src /usr/src/fish-shell

pushd /tmp/
# Working directory is now /tmp
# Directory stack contains /tmp /usr/src /usr/src/fish-shell

pushd +1
# Working directory is now /usr/src
# Directory stack contains /usr/src /usr/src/fish-shell /tmp

popd
# Working directory is now /usr/src/fish-shell
# Directory stack contains /usr/src/fish-shell /tmp

Вернуться к списку команд.

pwd - вывод текущей рабочей директории

Синтаксис

pwd

Описание

pwd выводит (печатает) текущую рабочую директорию.

Доступны следующие параметры:

  • -L, Вывод логической рабочей директории без разрешения символических ссылок (поведение по умолчанию).
  • -P, Вывод физической рабочей директории, с разрешением символических ссылок.

Вернуться к списку команд.

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] [VARIABLE ...]

Описание

read считывает данные со стандартного ввода и либо возвращает результат на стандартный вывод (для использования в подстановке команды), либо сохраняет результат в одну или несколько переменных оболочки. По умолчанию, read считывает одну строку и разбивает её на переменные по пробелам или табуляции. В качестве альтернативы можно использовать нулевой символ или максимальное количество символов для завершения ввода, а также другие разделители. В отличие от других оболочек, нет переменной по умолчанию (например, REPLY) для хранения результата — вместо этого он выводится на стандартный вывод.

Доступны следующие параметры:

  • -c CMD или --command=CMD устанавливает начальную строку в буфере команды в интерактивном режиме в CMD.
  • -d DELIMITER или --delimiter=DELIMITER разбивает по DELIMITER. DELIMITER будет использоваться как целая строка для разбиения, а не как набор символов.
  • -g или --global делает переменные глобальными.
  • -s или --silent маскирует символы, вводимые с терминала, заменяя их звёздочками. Это полезно для чтения паролей или другой конфиденциальной информации.
  • -l или --local делает переменные локальными.
  • -n NCHARS или --nchars=NCHARS заставляет read вернуть значение после чтения NCHARS символов или конца строки, в зависимости от того, что произойдёт раньше.
  • -p PROMPT_CMD или --prompt=PROMPT_CMD использует вывод команды оболочки PROMPT_CMD в качестве подсказки для интерактивного режима. Команда по умолчанию — set_color green; echo read; set_color normal; echo "> ".
  • -P PROMPT_STR или --prompt-str=PROMPT_STR использует строку в качестве подсказки для интерактивного режима. Это эквивалентно echo PROMPT_STR и предоставлено исключительно для избежания необходимости в оформлении подсказки как команды. Все специальные символы в строке автоматически экранируются перед передачей команде echo.
  • -R RIGHT_PROMPT_CMD или --right-prompt=RIGHT_PROMPT_CMD использует вывод команды оболочки RIGHT_PROMPT_CMD в качестве правой подсказки для интерактивного режима. Нет команды по умолчанию для правой подсказки.
  • -S или --shell включает подсветку синтаксиса, автодополнение и завершение команд, подходящие для ввода кода оболочки в интерактивном режиме. ПРИМЕЧАНИЕ: Перед fish 3.0 короткая опция для --shell была -s, но она была изменена для совместимости с короткой опцией bash -s для --silent.
  • -u или --unexport предотвращает экспорт переменных в дочерние процессы (поведение по умолчанию).
  • -U или --universal делает указанную переменную оболочки универсальной.
  • -x или --export экспортирует переменные в дочерние процессы.
  • -a или --array сохраняет результат в виде массива в одной переменной.
  • -z или --null помечает конец строки символом NULL вместо символа новой строки. Это также отключает интерактивный режим.
  • -L или --line читает каждую строку в последующие переменные и останавливается после заполнения каждой переменной. Не может быть комбинировано с опцией --delimiter.

Без опции --line, read читает одну строку ввода со стандартного ввода, разбивает её на токены и затем присваивает один токен каждой переменной, указанной в VARIABLES. Если токенов больше, чем переменных, остаток целиком присваивается последней переменной.

Если аргумент --delimiter не указан, переменная IFS используется в качестве списка символов для разбиения. Использование IFS устарело и будет удалено в будущих версиях. Значение по умолчанию IFS содержит пробелы, табуляции и символы новой строки. В качестве специального случая, если IFS установлена в пустую строку, каждый символ ввода рассматривается как отдельный токен.

С опцией --line, read читает строку ввода со стандартного ввода в каждую предоставленную переменную, останавливаясь, когда каждая переменная заполнится. Строка не разбивается на токены.

Если имена переменных не указаны, read переходит в специальный режим, обеспечивающий перенаправление стандартного ввода в стандартный вывод, что полезно для подстановки команд. Например, команда оболочки fish ниже может использоваться для чтения данных, которые должны быть предоставлены через аргумент командной строки из консоли вместо их жёсткого кодирования в самой команде, что позволяет повторно использовать команду в различных контекстах с различными входными значениями и предотвращает возможный вывод конфиденциальной информации в истории команд оболочки:

mysql -uuser -p(read)

При работе в этом режиме read не разбивает входные данные ни на какие составляющие, а перенаправляет текст в стандартный вывод без дальнейшей обработки или преобразования.

Если -a или --array предоставлены, разрешается только одно имя переменной, и токены хранятся как массив в этой переменной.

См. документацию для set для получения более подробной информации о правилах области видимости переменных.

Когда read достигает конца файла (EOF) вместо терминатора, код возврата устанавливается в 1. В противном случае он устанавливается в 0.

Для защиты оболочки от избыточного потребления системных ресурсов, read будет потреблять не более 10 МБ (1048576 байт); если терминатор не будет достигнут до этого предела, то переменная VARIABLE будет установлена в пустое значение, а код возврата – в 122. Этот предел может быть изменён с помощью переменной fish_read_limit. Если установить её в 0, ограничение будет снято.

Использование другого файла истории чтения

Команда read поддерживала флаги -m и --mode-name в версиях fish до 2.7.0 для указания альтернативного файла истории чтения. Эти флаги теперь устарели и игнорируются. Вместо этого установите переменную fish_history для указания идентификатора сессии истории. Это повлияет как на файл истории read, так и на файл истории команд оболочки fish. Вы можете установить её в пустую строку, чтобы указать, что история не должна читаться или записываться. Это полезно для презентаций, где вы не хотите раскрывать потенциально частную или конфиденциальную историю аудитории, но хотите, чтобы была доступна история, относящаяся к презентации.

Пример

Следующий код сохраняет значение 'hello' в переменной оболочки $foo.

echo hello|read foo

# This is a neat way to handle command output by-line:
printf '%s\n' line1 line2 line3 line4 | while read -l foo
                  echo "This is another line: $foo"
              end

# Delimiters given via "-d" are taken as one string
echo a==b==c | read -d == -l a b c
echo $a ## a
echo $b ## b
echo $c ## c

Вернуться к списку команд.

realpath - Преобразование пути в абсолютный путь без символических ссылок

Синтаксис

realpath path

Описание

Это реализовано как функция и встроенная команда. Функция попытается использовать внешнюю команду realpath, если она найдена. В противном случае она возвращается к встроенной команде. Встроенная команда не поддерживает никаких опций. Она предназначена для использования только скриптами, которые должны быть переносимыми. Реализация встроенной команды ведёт себя как GNU realpath при вызове без каких-либо опций (что является наиболее распространённым случаем). В общем случае скрипты не должны вызывать встроенную команду напрямую. Они должны использовать realpath.

Если путь некорректен, преобразованный путь не будет выведен в стандартный вывод, и будет сообщено об ошибке.

Вернуться к списку команд.

return - остановка текущей внутренней функции

Синтаксис

function NAME; [COMMANDS...;] return [STATUS]; [COMMANDS...;] end

Описание

return останавливает текущую функцию. Код возврата устанавливается в STATUS при его указании.

Обычно он добавляется внутри условного блока, такого как оператор if или switch, для условной остановки выполнения функции и возврата к вызывающей функции, но также может использоваться для определения кода возврата функции.

Пример

Следующий код представляет собой реализацию команды false как функции fish

function false
    return 1
end

Вернуться к списку команд.

set - отображение и изменение переменных оболочки.

Синтаксис

set [SCOPE_OPTIONS]
set [OPTIONS] VARIABLE_NAME VALUES...
set [OPTIONS] VARIABLE_NAME[INDICES]... VALUES...
set ( -q | --query ) [SCOPE_OPTIONS] VARIABLE_NAMES...
set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME
set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME[INDICES]...
set ( -S | --show ) [SCOPE_OPTIONS] [VARIABLE_NAME]...

Описание

set управляет переменными оболочки.

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

При указании как имён переменных, так и их значений, set присваивает переменной VARIABLE_NAME значения VALUES....

Следующие параметры управляют областью видимости переменной:

  • -a или --append добавляет значения к текущему набору значений переменной. Это можно использовать с --prepend для одновременного добавления и вставки значений. Это нельзя использовать при присвоении значения срезу переменной.
  • -p или --prepend вставляет значения в начало текущего набора значений переменной. Это можно использовать с --append для одновременного добавления и вставки значений. Это нельзя использовать при присвоении значения срезу переменной.
  • -l или --local устанавливает указанную переменную оболочки в локальную область видимости текущего блока, даже если переменная с таким же именем существует и не является локальной
  • -g или --global устанавливает указанную переменную оболочки в глобальную область видимости. Неглобальные переменные исчезают при завершении блока, к которому они относятся
  • -U или --universal устанавливает указанную переменную оболочки в универсальную область видимости. Если этот параметр указан, переменная будет доступна всем экземплярам fish текущего пользователя на данном компьютере и сохранится после перезапуска оболочки.
  • -x или --export экспортирует указанную переменную оболочки в дочерние процессы (делая её «переменной окружения»)
  • -u или --unexport не экспортирует указанную переменную оболочки в дочерние процессы

Доступны следующие параметры:

  • -e или --erase удаляет указанную переменную оболочки
  • -q или --query проверяет, определены ли указанные имена переменных. Ничего не выводит, но код возврата встроенной команды – количество переменных, не являющихся определёнными.
  • -n или --names Выводит только имена всех определённых переменных, а не их значения. Имена гарантированно отсортированы.
  • -S или --show Показывает информацию об указанных переменных. Если имена переменных не указаны, все переменные выводятся в отсортированном порядке. Другие флаги не могут использоваться с этим параметром. Выводимая информация включает в себя установлена ли переменная в локальной, глобальной и универсальной областях видимости. Если переменная установлена в одной из этих областей видимости, сообщается, экспортирована ли она. Также выводятся отдельные элементы и длина каждого элемента.
  • -L или --long не сокращает длинные значения при выводе переменных set

Если переменная установлена более чем на одно значение, переменная будет массивом с указанными элементами. Если переменная установлена на ноль элементов, она станет массивом с нулём элементов.

Если имя переменной представляет собой один или несколько элементов массива, например PATH[1 3 7], будут изменены только указанные элементы массива. Если вы указываете отрицательный индекс при расширении или присвоении значений переменной массива, индекс будет рассчитан с конца массива. Например, индекс -1 означает последний индекс массива.

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

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

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

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

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

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

set требует, чтобы все параметры предшествовали другим аргументам. Например, set flags -l приведет к установлению значения переменной flags в '-l', а не к назначению переменной локальной области видимости.

В режиме присвоения значений, set не изменяет код возврата. Это позволяет одновременно получать вывод и код возврата подкоманды, например if set output (command). В режиме запроса код возврата – количество не найденных переменных. В режиме удаления set завершается с кодом возврата 0 в случае успеха, с ненулевым кодом возврата, если команда неверна, если переменная защищена от записи или если переменной не существует.

Примеры

# Prints all global, exported variables.
set -xg

# Sets the value of the variable $foo to be 'hi'.
set foo hi

# Appends the value "there" to the variable $foo.
set -a foo there

# Does the same thing as the previous two commands the way it would be done pre-fish 3.0.
set foo hi
set foo $foo there

# Removes the variable $smurf
set -e smurf

# Changes the fourth element of the $PATH array to ~/bin
set PATH[4] ~/bin

# Outputs the path to Python if `type -p` returns true.
if set python_path (type -p python)
    echo "Python is at $python_path"
end

Примечания

Версии fish до 3.0 поддерживали синтаксис set PATH[1] PATH[4] /bin /sbin, который работал как set PATH[1 4] /bin /sbin. Этот синтаксис не был широко распространён и был неоднозначным и непоследовательным.

Вернуться к списку команд.

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 как fish -d2 будет включать диагностические сообщения, которые указывают режим поддержки цвета, используемый в данный момент.

Многие терминалы поддерживают 24-битные (т. е. истинные цвета) цветовые последовательности escape. Это включает современные xterm, Gnome Terminal, Konsole и iTerm2. Fish пытается обнаружить такие терминалы различными способами в config.fish. Вы можете явно включить эту поддержку с помощью set fish_term24bit 1.

Команда set_color использует базу данных terminfo, чтобы найти способ изменения цветов терминала для используемого терминала. На некоторых системах базы данных terminfo устарели и неполны, и может отсутствовать цветовая информация для терминалов, которые ее поддерживают. Fish предположит, что все терминалы могут использовать последовательности escape ANSI X3.64, если определение в terminfo указывает, что цвет ниже 16 не поддерживается.

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

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

source - оценить содержимое файла.

Синтаксис

source FILENAME [ARGUMENTS...]
somecommand | source

Описание

source оценивает команды из указанного файла в текущей оболочке. Это отличается от запуска нового процесса для выполнения команд (т. е. fish < FILENAME), поскольку команды будут оцениваться текущей оболочкой, что означает, что изменения переменных оболочки повлияют на текущую оболочку. Если после имени файла указаны дополнительные аргументы, они будут вставлены в переменную $argv. Переменная $argv не будет включать имя файла, который был вызван.

Если файл не указан, и стандартный ввод не является терминалом, или если имя файла '-' используется, стандартный ввод будет считаться файлом.

Код возврата source — это код возврата последней задачи, которая была выполнена. Если при открытии или чтении файла возникнет ошибка, source завершится с ненулевым кодом возврата.

. (одна точка) — это псевдоним для команды source. Использование . устарело в пользу source, а . будет удалено в будущей версии fish.

Пример

source ~/.config/fish/config.fish
# Causes fish to re-read its initialization file.

Ограничения

В версиях fish до 2.3.0 переменная $argv содержала бы один элемент (имя вызванного файла), если аргументы отсутствуют. В противном случае она содержала бы аргументы без имени вызванного файла. Это поведение было очень запутанным и отличалось от других оболочек, таких как bash и zsh.

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

status - запрос информации о среде выполнения fish

Синтаксис

status
status is-login
status is-interactive
status is-block
status is-breakpoint
status is-command-substitution
status is-no-job-control
status is-full-job-control
status is-interactive-job-control
status filename
status fish-path
status function
status line-number
status stack-trace
status job-control CONTROL-TYPE
status features
status test-feature FEATURE

Описание

Без аргументов status отображает сводку текущего состояния входа в систему и управления задачами оболочки.

Доступны следующие операции (подкоманды):

  • is-command-sub возвращает 0, если fish в настоящее время выполняет подстановку команд. Также -c или --is-command-substitution.
  • is-block возвращает 0, если fish в настоящее время выполняет блок кода. Также -b или --is-block.
  • is-breakpoint возвращает 0, если fish в настоящее время отображает приглашение в контексте команды breakpoint. Также см. функцию fish_breakpoint_prompt.
  • is-interactive возвращает 0, если fish интерактивен — то есть подключен к клавиатуре. Также -i или --is-interactive.
  • is-login возвращает 0, если fish — оболочка входа в систему — то есть если fish должен выполнять задачи входа в систему, такие как настройка PATH. Также -l или --is-login.
  • is-full-job-control возвращает 0, если полностью включено управление задачами. Также --is-full-job-control (без короткого флага).
  • is-interactive-job-control возвращает 0, если интерактивное управление задачами включено. Также --is-interactive-job-control (без короткого флага).
  • is-no-job-control возвращает 0, если управление задачами отключено. Также --is-no-job-control (без короткого флага).
  • filename выводит имя файла текущего выполняемого скрипта. Также current-filename, -f или --current-filename.
  • fish-path выводит абсолютный путь к текущей выполняемой инстанции fish.
  • function выводит имя текущей вызываемой функции, если это возможно. В противном случае отображается "Не является функцией" (или эквивалентный переведенный текст). Также current-function, -u или --current-function.
  • line-number выводит номер строки текущего выполняемого скрипта. Также current-line-number, -n или --current-line-number.
  • stack-trace выводит трассировку стека всех вызовов функций в стеке вызовов. Также print-stack-trace, -t или --print-stack-trace.
  • job-control CONTROL-TYPE устанавливает тип управления задачами, который может быть none, full, или interactive. Также -j CONTROL-TYPE или --job-control=CONTROL-TYPE.
  • features перечисляет все доступные флаги функций.
  • test-feature FEATURE возвращает 0, когда FEATURE включено, 1, если оно отключено, и 2, если оно не распознано.

Примечания

Для обратной совместимости каждая подкоманда также может быть указана как длинный или короткий параметр. Например, вместо status is-login можно ввести status --is-login. Формы флагов устарели и могут быть удалены в будущей версии (но не до fish 3.0).

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

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

string - манипулирование строками

Синтаксис

string escape [(-n | --no-quoted)] [--style=xxx] [STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string join0 [(-q | --quiet)] [STRING...]
string length [(-q | --quiet)] [STRING...]
string lower [(-q | --quiet)] [STRING...]
string match [(-a | --all)] [(-e | --entire)] [(-i | --ignore-case)] [(-r | --regex)]
             [(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string repeat [(-n | --count) COUNT] [(-m | --max) MAX] [(-N | --no-newline)]
              [(-q | --quiet)] [STRING...]
string replace [(-a | --all)] [(-f | --filter)] [(-i | --ignore-case)] [(-r | --regex)]
               [(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
string split [(-m | --max) MAX] [(-n | --no-empty)] [(-q | --quiet)] [(-r | --right)] SEP
             [STRING...]
string split0 [(-m | --max) MAX] [(-n | --no-empty)] [(-q | --quiet)] [(-r | --right)]
              [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
           [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
            [(-q | --quiet)] [STRING...]
string unescape [--style=xxx] [STRING...]
string upper [(-q | --quiet)] [STRING...]

Описание

string выполняет операции со строками.

Аргументы STRING берутся из командной строки, если стандартный ввод не подключен к конвейеру или файлу, в этом случае они считываются со стандартного ввода, по одной строке STRING на строку. Ошибка возникает при использовании аргументов STRING как в командной строке, так и в стандартном вводе.

Аргументы, начинающиеся с -, обычно интерпретируются как переключатели; -- заставляет следующие аргументы не обрабатываться как переключатели, даже если они начинаются с -. Переключатели и обязательные аргументы распознаются только в командной строке.

Большинство подкоманд принимают переключатель -q или --quiet, который подавляет обычный вывод, но завершается с указанным кодом возврата.

Доступны следующие подкоманды.

Подкоманда "escape"

string escape экранирует каждую строку STRING одним из трех способов. Первый — --style=script. Это значение по умолчанию. Оно изменяет строку так, что ее можно передать обратно eval для получения исходного аргумента. По умолчанию все специальные символы экранируются, а кавычки используются для упрощения вывода, когда это возможно. Если -n или --no-quoted указаны, упрощенная форма с кавычками не используется. Код возврата: 0, если хотя бы одна строка была экранирована, или 1 в противном случае.

--style=var гарантирует, что строка может использоваться в качестве имени переменной, кодируя все неалфавитно-цифровые символы в шестнадцатеричном формате. Строка сначала преобразуется в UTF-8 перед кодированием.

--style=url гарантирует, что строка может использоваться как URL, кодируя все символы, которые не являются допустимыми в URL, в шестнадцатеричном формате. Строка сначала преобразуется в UTF-8 перед кодированием.

--style=regex экранирует входную строку для буквального соответствия в выражении регулярного выражения. Строка сначала преобразуется в UTF-8 перед кодированием.

string unescape выполняет обратное действие команде string escape. Если строка, подлежащая разэкранированию, отформатирована неправильно, она игнорируется. Например, string unescape --style=var (string escape --style=var $str) вернёт исходную строку. Поддержка разэкранирования --style=regex отсутствует.

Подкоманда "join"

string join объединяет свои аргументы STRING в одну строку, разделяя их символом SEP, который может быть пустой строкой. Код возврата: 0, если хотя бы одно объединение было выполнено, или 1 в противном случае.

Подкоманда "join0"

string join объединяет свои аргументы STRING в одну строку, разделяя их нулевым байтом (NUL), и добавляет завершающий NUL. Это наиболее полезно в сочетании с инструментами, принимающими нуль-разделимый ввод, такими как sort -z. Код возврата: 0, если хотя бы одно объединение было выполнено, или 1 в противном случае.

Подкоманда "length"

string length сообщает длину каждого аргумента строки в символах. Код возврата: 0, если задан хотя бы один непустой аргумент STRING, или 1 в противном случае.

Подкоманда "lower"

string lower преобразует каждый аргумент строки в нижний регистр. Код возврата: 0, если хотя бы одна строка была преобразована в нижний регистр, иначе 1. Это означает, что в сочетании с флагом -q вы можете легко проверить, уже находится ли строка в нижнем регистре.

Подкоманда "match"

string match проверяет каждую строку STRING на соответствие PATTERN и выводит соответствующие подстроки. Только первое совпадение для каждой строки STRING отображается, если не задан флаг -a или --all, в этом случае выводятся все совпадения.

Если вы укажете флаги -e или --entire, то каждая совпадающая строка выводится вместе с любым префиксом или суффиксом, не соответствующим шаблону (эквивалентно grep без флага -o). Очевидно, вы можете добиться того же результата, добавив * или .* в зависимости от того, указан ли флаг --regex. Флаг --entire просто позволяет избежать усложнения шаблона и сделать намерение флага string match более понятным. Без флагов --entire и --regex шаблон PATTERN должен соответствовать всей строке STRING, прежде чем он будет выведен.

Сопоставление может быть выполнено без учета регистра с помощью --ignore-case или -i.

Если заданы флаги --index или -n, каждое совпадение отображается как позиция начала (с 1) и длина. По умолчанию PATTERN интерпретируется как шаблон glob, сопоставляемый с каждым аргументом STRING целиком. Шаблон glob считается действительным только в случае полного совпадения со строкой.

Если указаны флаги --regex или -r, PATTERN интерпретируется как совместимый с Perl регулярное выражение, которое не обязательно должно соответствовать всей строке STRING. Для регулярного выражения, содержащего группы захвата, будут выведены несколько элементов для каждого совпадения: одно для всего совпадения и одно для каждой группы захвата. В этом случае выводится только соответствующая часть STRING, если не задан флаг --entire.

Если используется --invert или -v, выбираются только те строки, которые не соответствуют заданному шаблону glob или регулярному выражению.

Код возврата: 0, если найдено хотя бы одно совпадение, или 1 в противном случае.

Подкоманда "repeat"

string repeat повторяет строку STRING -n или --count раз. Опции -m или --max ограничат количество выводимых символов (исключая перевод строки). Эта опция может использоваться сама по себе или в сочетании с --count. Если присутствуют как --count, так и --max, максимальное количество символов будет выведено, если только размер итоговой строки меньше максимума; в противном случае строка будет повторяться, пока не будет достигнуто значение count. Как --count, так и --max принимают числа больше или равные нулю; в случае нуля ничего не будет выведено. Если заданы -N или --no-newline, вывод не будет содержать символа перевода строки в конце.

Код возврата: 0, если полученная строка не пуста, 1 в противном случае.

Подкоманда "replace"

string replace похожа на string match, но заменяет непересекающиеся совпадающие подстроки строкой замены и выводит результат. По умолчанию PATTERN обрабатывается как подстрока для поиска.

Если заданы -r или --regex, PATTERN интерпретируется как регулярное выражение, совместимое с Perl, а REPLACEMENT может содержать C-стилевые 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 в противном случае.

Подкоманда "split"

string split разбивает каждую строку STRING по разделителю SEP, который может быть пустой строкой. Если заданы -m или --max, для каждой строки выполняется не более MAX разбиений. Если заданы -r или --right, разделение выполняется справа налево. Это полезно в сочетании с -m или --max. С -n или --no-empty, пустые результаты исключаются из рассмотрения (например, hello\n\nworld даст две строки, а не три).

Код возврата: 0, если выполнено хотя бы одно разделение, или 1 в противном случае.

См. также read --delimiter.

Подкоманда "split0"

string split0 разбивает каждую строку STRING по нулевому байту (NUL). Опции такие же, как у string split, за исключением того, что разделитель не задаётся.

split0 имеет важное свойство, что его вывод не разбивается при использовании в подстановке команд, что позволяет подстановке команд создавать элементы, содержащие символы новой строки. Это очень полезно при использовании с утилитами Unix, которые генерируют нулевые байты, такими как find -print0 или sort -z. См. примеры split0 ниже.

Подкоманда "sub"

string sub выводит подстроку каждого аргумента строки. Начало подстроки можно указать с помощью -s или --start и значения индекса с 1. Положительные значения индекса относятся к началу строки, отрицательные - к концу строки. Значение по умолчанию для начала - 1. Длина подстроки может быть задана с помощью -l или --length. Если длина не указана, подстрока продолжается до конца каждой строки STRING. Код возврата: 0, если выполнена хотя бы одна операция взятия подстроки, 1 в противном случае.

Подкоманда "trim"

string trim удаляет начальные и конечные пробелы из каждой строки STRING. Если заданы -l или --left, удаляются только начальные пробелы. Если заданы -r или --right, удаляются только конечные пробелы. Переключатель -c или --chars приводит к удалению символов из CHARS вместо пробелов. Код возврата: 0, если был удалён хотя бы один символ, или 1 в противном случае.

Подкоманда "upper"

string upper преобразует каждый аргумент строки в верхний регистр. Код возврата: 0, если хотя бы одна строка была преобразована в верхний регистр, иначе 1. Это означает, что в сочетании с флагом -q вы можете легко проверить, уже находится ли строка в верхнем регистре.

Регулярные выражения

Обе подкоманды match и replace поддерживают регулярные выражения при использовании опций -r или --regex. Диалект - PCRE2.

В общем случае, специальные символы являются таковыми по умолчанию, поэтому a+ соответствует одному или нескольким символам "a", а a\+ соответствует символу "a", за которым следует "+". (a+) соответствует одному или нескольким символам "a" в группе захвата ((?:XXXX) обозначает незахватывающую группу). Для параметра замены replace, $n относится к n-й группе совпадения. В параметре совпадения \n (например, \1) относится к группам.

Некоторые особенности включают повторения:

  • * обозначает 0 или более повторений предыдущего выражения
  • + 1 или более
  • ? 0 или 1.
  • {n} ровно n (где n — число)
  • {n,m} не менее n, не более m.
  • {n,} n или более

Классы символов, некоторые из наиболее важных:

  • . любой символ, кроме новой строки
  • \d десятичная цифра и \D, не десятичная цифра
  • \s пробел и \S, не пробел
  • \w символ "слова" и \W, несимвол "слова"
  • [...] (где "..." — некоторые символы) — множество символов
  • [^...] — обратное заданному множеству символов
  • [x-y] — диапазон символов от x до y
  • [[:xxx:]] — именованное множество символов
  • [[:^xxx:]] — обратное именованному множеству символов
  • [[:alnum:]] : "alphanumeric"
  • [[:alpha:]] : "alphabetic"
  • [[:ascii:]] : "0-127"
  • [[:blank:]] : "пробел или табуляция"
  • [[:cntrl:]] : "символ управления"
  • [[:digit:]] : "десятичная цифра"
  • [[:graph:]] : "печатаемый символ, исключая пробел"
  • [[:lower:]] : "маленькая буква"
  • [[:print:]] : "печатаемый символ, включая пробел"
  • [[:punct:]] : "печатаемый символ, исключая alphanumeric"
  • [[:space:]] : "пробельный символ"
  • [[:upper:]] : "заглавная буква"
  • [[:word:]] : "то же, что и \w"
  • [[:xdigit:]] : "шестнадцатеричная цифра"

Группы:

  • (...) — группа захвата
  • (?:...) — незахватывающая группа
  • \n — ссылка обратной связи (где n — номер группы, начиная с 1)
  • $n — ссылка из выражения замены на группу в выражении соответствия.

И ещё кое-что:

  • \b обозначает границу слова, \B — нет границы слова.
  • ^ — начало строки или строки, $ — конец.
  • | — "альтернация", т.е. "или".

Примеры

> string length 'hello, world'
12

> set str foo
> string length -q $str; echo $status
0
# Equivalent to test -n $str
> string sub --length 2 abcde
ab

> string sub -s 2 -l 2 abcde
bc

> string sub --start=-2 abcde
de
> string split . example.com
example
com

> string split -r -m1 / /usr/local/bin/fish
/usr/local/bin
fish

> string split '' abc
a
b
c
> seq 3 | string join ...
1...2...3
> string trim ' abc  '
abc

> string trim --right --chars=yz xyzzy zany
x
zan
> echo \x07 | string escape
\cg
> string escape --style=var 'a1 b2'\\u6161
\a1_20b2__c_E6_85_A1

Примеры сопоставления glob

> string match '?' a
a

> string match 'a*b' axxb
axxb

> string match -i 'a??B' Axxb
Axxb

> echo 'ok?' | string match '*\?'
ok?

# Note that only the second STRING will match here.
> string match 'foo' 'foo1' 'foo' 'foo2'
foo

> string match -e 'foo' 'foo1' 'foo' 'foo2'
foo1
foo
foo2


> string match 'foo?' 'foo1' 'foo' 'foo2'
foo1
foo
foo2

Примеры сопоставления regex

> 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

Примеры с разделителем NUL

> ## Count files in a directory, without being confused by newlines.
> count (find . -print0 | string split0)
42

> ## Sort a list of elements which may contain newlines
> set foo beta alpha\ngamma
> set foo (string join0 $foo | sort -z | string split0)
> string escape $foo[1]
alpha\\ngamma

Примеры замены литералов

> 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 будут вычислены, даже если его тело не выполняется. Все подстановки, включая подстановки команд, должны быть выполнены до того, как значение может быть сравнено с параметром.

Пример

Если переменная $animal содержит имя животного, следующий код попытается его классифицировать:

switch $animal
    case cat
        echo evil
    case wolf dog human moose dolphin whale
        echo mammal
    case duck goose albatross
        echo bird
    case shark trout stingray
        echo fish
    case '*'
        echo I have no idea what a $animal is
end

Если вышеуказанный код был запущен с $animal установленным в whale, выход был бы mammal.

Вернуться к списку команд.

test - проверка файлов и текста

Краткое описание

test [EXPRESSION]
[ [EXPRESSION] ]

Описание

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

Первый вариант (test) предпочтительнее. Для совместимости с другими оболочками доступен второй вариант: соответствующая пара квадратных скобок ([ [EXPRESSION ] ]).

Эта проверка в основном совместима с POSIX.

При использовании переменной в качестве аргумента для оператора проверки, ее почти всегда следует заключать в двойные кавычки. Есть только две ситуации, когда безопаснее опустить кавычки. Первая — когда аргумент — это строковая константа без пробелов или других символов, имеющих особое значение для оболочки (например, точка с запятой). Например, test -b /my/file. Вторая — использование переменной, которая расширяется ровно до одного элемента, включая пустую строку (например, «set x ’»). (). If the variable is not set, set but with no value, or set to more than one value you must enclose it in double-quotes. For example,test "$x" = "$y". Since it is always safe to enclose variables in double-quotes when used astest` — аргументы, которые рекомендуется использовать.)

Операторы для файлов и каталогов

  • -b FILE возвращает true, если FILE является блочным устройством.
  • -c FILE возвращает true, если FILE является символьным устройством.
  • -d FILE возвращает true, если FILE является каталогом.
  • -e FILE возвращает true, если FILE существует.
  • -f FILE возвращает true, если FILE является обычным файлом.
  • -g FILE возвращает true, если у FILE установлен бит группы.
  • -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 установлен бит пользователя.
  • -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.

Поддерживаются целые и числа с плавающей точкой.

Операторы для объединения выражений

  • COND1 -a COND2 возвращает true, если оба COND1 и COND2 истинны.
  • COND1 -o COND2 возвращает true, если любой из COND1 или COND2 истинен.

Выражения могут быть инвертированы с помощью оператора !.

  • ! EXPRESSION возвращает true, если EXPRESSION ложно, и false, если EXPRESSION истинно.

Выражения могут быть сгруппированы с помощью круглых скобок.

  • ( EXPRESSION ) возвращает значение EXPRESSION.

    Обратите внимание, что круглые скобки обычно требуют экранирования с помощью \(, чтобы избежать их интерпретации как подстановки команд.

Примеры

Если каталог /tmp существует, скопировать файл /etc/motd в него:

if test -d /tmp
    cp /etc/motd /tmp/motd
end

Если переменная MANPATH определена и не пуста, вывести ее содержимое. (Если MANPATH не определена, то она будет расширена до нулевых аргументов, если не указаны кавычки).

if test -n "$MANPATH"
    echo $MANPATH
end

Круглые скобки и операторы -o и -a могут быть объединены для создания более сложных выражений. В этом примере выводится "успешно", если существует файл /foo или /bar, а также файл /baz или /bat.

if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \)
    echo Success.
end.

Числовые сравнения просто провалены, если один из операндов не является числом:

if test 42 -eq "The answer to life, the universe and everything"
    echo So long and thanks for all the fish ## will not be executed
end

Общим сравнением является сравнение со $status:

if test $status -eq 0
    echo "Previous command succeeded"
end

Предыдущую проверку также можно инвертировать:

if test ! $status -eq 0
    echo "Previous command failed"
end

что логически эквивалентно следующему:

if test $status -ne 0
    echo "Previous command failed"
end

Стандарты

test реализует подмножество стандарта IEEE Std 1003.1-2008 (POSIX.1). Применяются следующие исключения:

  • Операторы < и > для сравнения строк не реализованы.
  • Так как эта проверка является встроенной функцией оболочки, а не отдельной утилитой, использование флага -c для специальных дескрипторов файлов, таких как стандартный вход и выход, может не давать тех же результатов при вызове из канала, что и при вызове утилиты test в другой оболочке.

    В таких случаях можно использовать 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 указано, то команды trap, связанные с каждым REASON, отображаются. Если не указаны никакие аргументы или указан только -p, trap выводит список команд, связанных с каждым сигналом.

Имена сигналов нечувствительны к регистру, и префикс SIG необязателен.

Код возврата — 1, если какой-либо REASON недопустим; в противном случае trap возвращает 0.

Пример

trap "status --print-stack-trace" SIGUSR1
# Prints a stack trace each time the SIGUSR1 signal is sent to the shell.

Вернуться к списку команд.

true - возвращение успешного результата

Сводка

true

Описание

true устанавливает код завершения в 0.

Вернуться к списку команд.

type - указывает, как будет интерпретироваться команда

Сводка

type [OPTIONS] NAME [NAME ...]

Описание

Без опций, type указывает, как будет интерпретироваться каждая NAME при использовании в качестве имени команды.

Доступны следующие опции:

  • -a или --all выводит все возможные определения указанных имён.
  • -f или --no-functions подавляет поиск функций и встроенных команд.
  • -t или --type выводит function, builtin, или file, если NAME является функцией оболочки, встроенной командой или файлом на диске соответственно.
  • -p или --path возвращает имя файла на диске, который будет выполнен, или ничего, если type -t name не вернёт file.
  • -P или --force-path возвращает имя файла на диске, который будет выполнен, или ничего, если файл с указанным именем не найден в $PATH.
  • -q или --quiet подавляет весь вывод; это полезно при тестировании кода завершения.

Флаги -q, -p, -t и -P (и их псевдонимы длинных флагов) взаимоисключающие. Только один может быть указан за раз.

Пример

> type fg
fg is a builtin

Вернуться к списку команд.

ulimit - установка или получение ограничений на использование ресурсов

Сводка

ulimit [OPTIONS] [LIMIT]

Описание

Встроенная команда ulimit устанавливает или выводит ограничения на использование ресурсов оболочкой и любыми запущенными ею процессами. Если новое значение ограничения не указано, выводится текущее значение ограничения ресурса; в противном случае, указанное ограничение устанавливается на новое значение.

Используйте один из следующих переключателей, чтобы указать, какое ограничение ресурсов установить или получить:

  • -c или --core-size: максимальный размер файлов 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

Вернуться к списку команд.

wait - ожидание завершения задач

Сводка

wait [-n | --any] [PID | PROCESS_NAME] ...

Описание

wait ожидает завершения дочерних задач.

  • Если указан идентификатор процесса, команда ожидает завершения задачи, к которой принадлежит процесс с данным идентификатором.
  • Если указано имя процесса, команда ожидает завершения задач, к которым принадлежат соответствующие процессы.
  • Если не указан ни идентификатор процесса, ни имя процесса, команда ожидает завершения всех фоновых задач.
  • Если предоставлен флаг -n / --any, команда возвращается как только завершится первая задача. Если он не указан, она возвращается после завершения всех задач.

Пример

sleep 10 &
wait $last_pid

запускает sleep в фоновом режиме, а затем ожидает его завершения.

for i in (seq 1 5); sleep 10 &; end
wait

запускает пять задач в фоновом режиме, а затем ожидает завершения всех из них.

for i in (seq 1 5); sleep 10 &; end
hoge &
wait sleep

запускает пять задач и hoge в фоновом режиме, а затем ожидает завершения всех sleep задач, но не ожидает завершения hoge.

Вернуться к списку команд.

while - многократное выполнение команды

Сводка

while CONDITION; COMMANDS...; end

Описание

while многократно выполняет CONDITION, и если код завершения равен 0, то выполняет COMMANDS.

Код завершения цикла while — это код завершения последней итерации команды COMMANDS, которая была выполнена, или 0, если ни одна не была выполнена. (Это соответствует другим оболочкам и совместимо с POSIX.)

Вы можете использовать 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.

Вернуться к списку команд.

© 2019 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.0/commands.html

Spec-Zone.ru

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