Spec-Zone.ru › Fish 2.4

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

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

Практически все команды fish отвечают на опции -h или --help, чтобы отобразить соответствующую справку, также доступную с помощью команд help и man, как показано ниже:

echo -h
echo --help
# Prints help to the terminal window

man echo
# Displays the man page in the system pager
# (normally 'less', 'more' or 'most').

help echo
# Open a web browser to show the relevant documentation

abbr - управление сокращениями fish

Синтаксис

abbr --add word phrase...
abbr --show
abbr --list
abbr --erase word

Описание

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

Сокращения — это определённые пользователем последовательности символов или слова, которые заменяются более длинными фразами после их ввода. Например, часто используемая команда, такая как git checkout может быть сокращена до gco. После ввода gco и нажатия Пробел или Ввод, полная фраза git checkout появится в строке команд.

Сокращения хранятся в переменной, названной fish_user_abbreviations. Она автоматически создаётся как универсальная переменная при первом создании сокращения. Если вы хотите, чтобы ваши сокращения были приватными для конкретной сессии fish, вы можете добавить следующее в файл *~/.config/fish/config.fish* перед определением вашего первого сокращения:

if status --is-interactive
    set -g fish_user_abbreviations
    abbr --add first 'echo my first abbreviation'
    abbr --add second 'echo my second abbreviation'
    # etcetera
end

Вы можете создавать сокращения непосредственно в командной строке, и они будут автоматически сохранены и отображены в других сессиях fish, если fish_user_abbreviations является универсальной переменной. Если вы сохраняете переменную как универсальную, abbr --add в config.fish не сделают ничего, кроме незначительного замедления запуска.

Опции

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

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

Примечание: версия fish 2.1 поддерживала -a WORD=PHRASE. Этот синтаксис теперь устарел, но всё ещё будет преобразован.

Примеры

abbr -a gco git checkout

Добавьте новое сокращение, где gco будет заменено на git checkout.

abbr -e gco

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

ssh another_host abbr -s | source

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

Возвращение к индексу команд.

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

Синтаксис

alias NAME DEFINITION
alias NAME=DEFINITION

Описание

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

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

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

Вы не можете создать алиас для функции с тем же именем.

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

Пример

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

alias rmi "rm -i"

# This is equivalent to entering the following function:

function rmi
    rm -i $argv
end

# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":

alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'

Возвращение к индексу команд.

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

Синтаксис

COMMAND1; and COMMAND2

Описание

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

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

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

Пример

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

make; and make install; or make clean

Возвращение к индексу команд.

begin - начало нового блока кода

Синтаксис

begin; [COMMANDS...;] end

Описание

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

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

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

begin не изменяет текущий код завершения.

Пример

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

begin
    set -l PIRATE Yarrr
    ...
end

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

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

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

Возвращение к индексу команд.

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

Синтаксис

bg [PID...]

Описание

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

Идентификатор процесса желаемой задачи обычно находится с помощью расширения процесса.

Пример

bg %1 поместит задачу с идентификатором 1 в фоновый режим.

Возвращение к индексу команд.

bind - обработка привязок клавиш fish

Синтаксис

bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE]
     [(-k | --key)] SEQUENCE COMMAND [COMMAND...]
bind [(-M | --mode) MODE] [(-k | --key)] SEQUENCE
bind (-K | --key-names) [(-a | --all)]
bind (-f | --function-names)
bind (-e | --erase) [(-M | --mode) MODE]
     (-a | --all | [(-k | --key)] SEQUENCE [SEQUENCE...])

Описание

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

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

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

Если используется переключатель -k, используется имя клавиши (например, 'down', 'up' или 'backspace') вместо последовательности. Используемые имена соответствуют соответствующим переменным curses, но без префикса 'key_'. (См. terminfo(5) для получения дополнительной информации или используйте bind --key-names для получения списка всех доступных именованных клавиш.)

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

Когда COMMAND является командой shellscript, хорошей практикой является поместить фактический код в функцию и просто привязать к имени функции. Таким образом, становится намного проще тестировать функцию во время редактирования, а результат обычно более читабелен.

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

Если указано несколько COMMAND , они все выполняются в указанном порядке при нажатии клавиши.

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

Привязки клавиш по умолчанию не сохраняются между сессиями. Одиночные bind в config.fish не будут иметь никакого эффекта, так как он обрабатывается до настройки привязок по умолчанию. Чтобы сохранить пользовательские привязки клавиш, поместите bind в функцию, называемую fish_user_key_bindings, которая будет автоматически подключаться.

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

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

  • -k или --key Укажите имя клавиши, например, 'left' или 'backspace', вместо последовательности символов
  • -K или --key-names Отобразить список доступных имён клавиш. Указание -a или --all включает клавиши, у которых нет известного сопоставления
  • -f или --function-names Отобразить список доступных функций ввода
  • -M MODE или --mode MODE Укажите режим привязки, в котором используется привязка. По умолчанию — "default"
  • -m NEW_MODE или --sets-mode NEW_MODE Изменить текущий режим на NEW_MODE после выполнения этой привязки
  • -e или --erase Удалить привязку с заданной последовательностью и режимом вместо определения новой. Несколько последовательностей можно указать с этим флагом. Указание -a или --all с -M или --mode удаляет все привязки в заданном режиме независимо от последовательности. Указание -a или --all без -M или --mode удаляет все привязки во всех режимах независимо от последовательности.
  • -a или --all См. --erase и --key-names

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

  • accept-autosuggestion, принять текущее автопредложение полностью
  • backward-char, переместить на один символ влево
  • backward-bigword, переместить на одно слово, разделённое пробелами, влево
  • backward-delete-char, удалить один символ ввода слева от курсора
  • backward-kill-bigword, переместить слово, разделённое пробелами, слева от курсора, в буфер обмена
  • backward-kill-line, переместить всё от начала строки до курсора в буфер обмена
  • backward-kill-path-component, переместить один компонент пути слева от курсора (всё от последнего "/" или пробела эксклюзивно) в буфер обмена
  • backward-kill-word, переместить слово слева от курсора в буфер обмена
  • backward-word, переместить одно слово влево
  • beginning-of-history, переместиться к началу истории
  • beginning-of-line, переместиться к началу строки
  • begin-selection, начать выделение текста
  • capitalize-word, сделать текущее слово с заглавной буквы
  • complete, угадать оставшуюся часть текущего токена
  • complete-and-search, вызвать настраиваемый просмотрщик доступных вариантов завершения
  • delete-char, удалить один символ справа от курсора
  • downcase-word, сделать текущее слово строчными буквами
  • end-of-history, переместиться к концу истории
  • end-of-line, переместиться к концу строки
  • end-selection, завершить выделение текста
  • forward-bigword, переместить на одно слово, разделённое пробелами, вправо
  • forward-char, переместить на один символ вправо
  • forward-word, переместить на одно слово вправо
  • history-search-backward, выполнить поиск в истории по предыдущему совпадению
  • history-search-forward, выполнить поиск в истории по следующему совпадению
  • kill-bigword, переместить следующее слово, разделённое пробелами, в буфер обмена
  • kill-line, переместить всё от курсора до конца строки в буфер обмена
  • kill-selection, переместить выделенный текст в буфер обмена
  • kill-whole-line, переместить строку в буфер обмена
  • kill-word, переместить следующее слово в буфер обмена
  • suppress-autosuggestion, удалить текущее автопредложение
  • swap-selection-start-stop, перейти к другому концу выделенного текста без изменения выделения
  • transpose-chars, транспонировать два символа слева от курсора
  • transpose-words, транспонировать два слова слева от курсора
  • upcase-word, сделать текущее слово заглавными буквами
  • yank, вставить последнюю запись из буфера обмена в буфер
  • yank-pop, повернуться к предыдущей записи из буфера обмена

Примеры

bind \cd 'exit'

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

bind -k ppage history-search-backward

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

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

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

Специальный случай: символ escape

Ключ 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

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

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

Пример

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

switch $animal
    case cat
        echo evil
    case wolf dog human moose dolphin whale
        echo mammal
    case duck goose albatross
        echo bird
    case shark trout stingray
        echo fish
    # Note that the next case has a wildcard which is quoted
    case '*'
        echo I have no idea what a $animal is
end

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

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

cd - изменить директорию

Синтаксис

cd [DIRECTORY]

Описание

cd изменяет текущую рабочую директорию.

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

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

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

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

Примеры

cd
# changes the working directory to your home directory.

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

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

command - запустить программу

Синтаксис

command [OPTIONS] COMMANDNAME [ARGS...]

Описание

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

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

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

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

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

Примеры

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

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

Возврат к индексу команд.

commandline - установка или получение текущего буфера командной строки

Синтаксис

commandline [OPTIONS] [CMD]

Описание

commandline может использоваться для установки или получения текущего содержимого буфера командной строки.

Без параметров commandline возвращает текущее значение командной строки.

При указании параметра CMD, буфер командной строки очищается и заменяется содержимым CMD.

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

  • -C или --cursor устанавливают или получают текущую позицию курсора, а не содержимое буфера. Если аргумент не указан, печатается текущая позиция курсора, в противном случае аргумент интерпретируется как новая позиция курсора.
  • -f или --function вводят функции readline в читатель. Этот параметр не может быть объединён с другими параметрами. Он приведет к тому, что все дополнительные аргументы будут интерпретированы как функции readline, и эти функции будут введены в читатель, так что они будут возвращены в читатель до того, как будут считаны любые дополнительные фактические нажатия клавиш.

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

  • -a или --append не удаляет текущую командную строку, добавляет указанную строку в конец.
  • -i или --insert не удаляет текущую командную строку, вставляет указанную строку в текущую позицию курсора.
  • -r или --replace удаляет текущую командную строку и заменяет её указанной строкой (по умолчанию).

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

  • -b или --current-buffer выбирает весь буфер (по умолчанию).
  • -j или --current-job выбирает текущую задачу.
  • -p или --current-process выбирает текущий процесс.
  • -t или --current-token выбирает текущий токен.

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

  • -c или --cut-at-cursor выводит только выбор до текущей позиции курсора.
  • -o или --tokenize токенизирует выбор и выводит один токен типа строки в строке.

Если commandline вызывается во время вызова для завершения заданной строки с помощью complete -C STRING, commandline будет считать указанную строку текущим содержимым командной строки.

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

  • -L или --line выводит строку, на которой находится курсор, начиная с верхней строки с 1.
  • -S или --search-mode возвращает true, если командная строка выполняет поиск в истории.
  • -P или --paging-mode возвращает true, если командная строка отображает содержимое страницы, например, результаты автодополнения.

Пример

commandline -j $history[3] заменяет задачу под курсором третьим элементом из истории командной строки.

Если командная строка содержит

> echo $flounder >&2 | less; and echo $catfish

(с курсором на "о" в "flounder")

Тогда следующие вызовы работают так:

> commandline -t
$flounder
> commandline -ct
$fl
> commandline -b ## or just commandline
echo $flounder >&2 | less; and echo $catfish
> commandline -p
echo $flounder >&2
> commandline -j
echo $flounder >&2 | less

Возврат к индексу команд.

complete - редактирование команд специфических автодополнений

Синтаксис

complete ( -c | --command | -p | --path ) COMMAND
        [( -c | --command | -p | --path ) COMMAND]...
        [( -e | --erase )]
        [( -s | --short-option ) SHORT_OPTION]...
        [( -l | --long-option | -o | --old-option ) LONG_OPTION]...
        [( -a | --arguments ) OPTION_ARGUMENTS]
        [( -f | --no-files )]
        [( -r | --require-parameter )]
        [( -x | --exclusive )]
        [( -w | --wraps ) WRAPPED_COMMAND]...
        [( -n | --condition ) CONDITION]
        [( -d | --description ) DESCRIPTION]
complete ( -C[STRING] | --do-complete[=STRING] )

Описание

Для ознакомления с указанием автодополнений см. Написание собственных автодополнений в руководстве fish.

  • COMMAND — имя команды, для которой нужно добавить автодополнение.
  • SHORT_OPTION — односимвольный параметр для команды.
  • LONG_OPTION — многосимвольный параметр для команды.
  • OPTION_ARGUMENTS — параметр, содержащий список возможных аргументов параметра, которые могут содержать подстановки команд.
  • DESCRIPTION — описание того, что делает параметр и/или аргументы параметра.
  • -c COMMAND или --command COMMAND указывает, что COMMAND — имя команды.
  • -p COMMAND или --path COMMAND указывает, что COMMAND — абсолютный путь к программе (по возможности содержащий подстановки).
  • -e или --erase удаляет указанное автодополнение.
  • -s SHORT_OPTION или --short-option=SHORT_OPTION добавляет короткий параметр в список автодополнений.
  • -l LONG_OPTION или --long-option=LONG_OPTION добавляет параметр в стиле GNU в список автодополнений.
  • -o LONG_OPTION или --old-option=LONG_OPTION добавляет параметр в стиле старого списка автодополнений (см. подробности ниже).
  • -a OPTION_ARGUMENTS или --arguments=OPTION_ARGUMENTS добавляет указанные аргументы параметра в список автодополнений.
  • -f или --no-files указывает, что параметры, определённые этим автодополнением, не могут быть после имени файла.
  • -r или --require-parameter указывает, что параметры, указанные этим автодополнением, всегда должны иметь аргумент параметра, т. е. не могут быть после другого параметра.
  • -x или --exclusive подразумевает как -r, так и -f.
  • -w WRAPPED_COMMAND или --wraps=WRAPPED_COMMAND заставляет указанную команду унаследовать автодополнения от обернутой команды (см. подробности ниже).
  • -n или --condition указывает команду оболочки, которая должна вернуть 0, если автодополнение должно быть использовано. Это позволяет указать автодополнения, которые должны использоваться только в некоторых случаях.
  • -CSTRING или --do-complete=STRING заставляет complete попытаться найти все возможные автодополнения для указанной строки.
  • -C или --do-complete без аргумента заставляет complete попытаться найти все возможные автодополнения для текущего буфера командной строки. Если оболочка не в интерактивном режиме, возвращается ошибка.

Командно-специфические автодополнения в fish основаны на понятии параметров и аргументов. Параметр — это параметр, который начинается с дефиса, например, '-h', '-help' или '--help'. Аргументы — это параметры, которые не начинаются с дефиса. Fish распознаёт три стиля параметров, такие же, как в GNU-версии библиотеки getopt. Эти стили:

  • Короткие параметры, как '-a'. Короткие параметры имеют длину в один символ, предваряются одним дефисом и могут быть сгруппированы (например, '-la', что эквивалентно '-l -a'). Аргументы параметров могут быть указаны в следующем параметре ('-w 32') или путём добавления значения к параметру ('-w32').
  • Параметры старого стиля, как '-Wall'. Параметры старого стиля могут иметь длину более одного символа, предваряются одним дефисом и не могут быть сгруппированы. Аргументы параметров указываются в следующем параметре ('-ao null').
  • Параметры стиля GNU, как '--colors'. Параметры стиля GNU могут иметь длину более одного символа, предваряются двумя дефисами, и не могут быть сгруппированы. Аргументы параметров могут быть указаны в следующем параметре ('--quoting-style shell') или путём добавления к параметру '=' и значения ('--quoting-style=shell'). Параметры стиля GNU могут быть сокращены, до тех пор пока сокращение уникально ('--h') эквивалентно '--help', если help — единственный параметр, начинающийся с 'h').

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

Параметры для указания переключателей команды и обернутых команд можно использовать несколько раз для определения нескольких автодополнений для команды(ей) в одном вызове.

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

Когда -a или --arguments указываются вместе с длинными, короткими или параметрами старого стиля, указанные аргументы используются только как автодополнения при попытке дополнить аргумент для любого из указанных параметров. Если -a или --arguments указываются без каких-либо длинных, коротких или параметров старого стиля, указанные аргументы используются при завершении любого аргумента команды (кроме завершения аргумента параметра, который был указан с -r или --require-parameter).

Подстановки команд, найденные в OPTION_ARGUMENTS, не должны возвращать список аргументов, разделённых пробелами. Вместо этого они должны возвращать список аргументов, разделённых символом новой строки, и каждый аргумент может иметь символ табуляции, за которым следует описание аргумента. Любое описание, предоставленное таким образом, переопределяет описание, заданное с помощью -d или --description.

Параметры -w или --wraps заставляют указанную команду унаследовать автодополнения от другой команды. Говорят, что команда-наследник "оборачивает" унаследованную команду. У обернутой команды могут быть свои автодополнения в дополнение к унаследованным. Команда может обернуть несколько команд, а обертывание является транзитивным: если 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, contains интерпретирует все аргументы, начинающиеся с -, как опции для contains, пока не достигнет аргумента, который -- (два дефиса). См. примеры ниже.

Пример

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

Вышеприведенный код проверяет, находятся ли ~/bin и /usr/local/bin в пути, и добавляет их, если нет.

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

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

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

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

Синтаксис

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

Описание

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

Пример

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

for i in *.tmp
    if grep smurf $i
        continue
    end
    rm $i
end

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

count - посчитать количество элементов массива

Синтаксис

count $VARIABLE

Описание

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

count не принимает никаких опций, включая -h или --help.

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

Пример

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

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

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

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

Синтаксис

dirh

Описание

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

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

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

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

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

Синтаксис

dirs
dirs -c

Описание

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

С "-c" он очищает стек каталогов вместо этого.

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

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

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

Синтаксис

echo [OPTIONS] [STRING]

Описание

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

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

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

Последовательности escape

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

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

Пример

echo 'Hello World'

Вывести hello world в стандартный вывод

echo -e 'Top\nBottom'

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

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

else - выполнить команду, если условие не выполняется

Синтаксис

if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end

Описание

if выполнит команду CONDITION. Если код выхода условия равен 0, будут выполнены команды COMMANDS_TRUE. Если он не равен 0 и указан else, будет выполнена COMMANDS_FALSE.

Пример

Следующий код проверяет, является ли файл foo.txt обычным файлом.

if test -f foo.txt
    echo foo.txt exists
else
    echo foo.txt does not exist
end

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

emit - Издать общее событие

Синтаксис

emit EVENT_NAME [ARGUMENTS...]

Описание

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

Пример

Следующий код сначала определяет обработчик событий для общего события с именем 'test_event', а затем излучает событие этого типа.

function event_test --on-event test_event
    echo event test: $argv
end

emit test_event something

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

end - завершить блок команд.

Синтаксис

begin; [COMMANDS...] end
if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end
while CONDITION; COMMANDS...; end
for VARNAME in [VALUES...]; COMMANDS...; end
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end

Описание

end завершает блок команд.

Для получения дополнительной информации ознакомьтесь с документацией по блоковым конструкциям, таким как if, for и while.

Команда end не изменяет текущий код выхода.

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

eval - вычислить указанные команды

Синтаксис

eval [COMMANDS...]

Описание

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

Пример

Следующий код вызовет команду ls. Обратите внимание, что fish не поддерживает использование переменных оболочки как прямых команд; для обхода этой проблемы можно использовать eval.

set cmd ls
eval $cmd

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

exec - выполнить команду в текущем процессе

Синтаксис

exec COMMAND [OPTIONS...]

Описание

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

Пример

exec emacs запускает текстовый редактор emacs и завершает fish. При завершении emacs сеанс завершится.

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

exit - выйти из оболочки

Синтаксис

exit [STATUS]

Описание

exit вызывает выход fish. Если STATUS предоставлено, оно будет преобразовано в целое число и использовано в качестве кода выхода. В противном случае код выхода будет таким же, как у последней выполненной команды.

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

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

false - вернуть неудачный результат

Синтаксис

false

Описание

false устанавливает код выхода в 1.

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

fg - перевести задание в фоновый режим

Синтаксис

fg [PID]

Описание

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

Идентификатор процесса целевого процесса обычно находится с помощью расширения процесса. Fish способен расширять гораздо больше, чем просто числовой PID, включая ссылки на себя и поиск PID по имени.

Пример

fg %1 переведет задание с идентификатором задания 1 в фоновый режим.

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

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

Синтаксис

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

Описание

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

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

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

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

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

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

Описание

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

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

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

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

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

Пример

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

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

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

Синтаксис

fish_indent [OPTIONS]

Описание

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

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

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

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

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

Синтаксис

fish_key_reader [OPTIONS]

Описание

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

Описание

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

Несколько строк в fish_mode_prompt не поддерживаются.

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

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

Синтаксис

function fish_prompt
    ...
end

Описание

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

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

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

Пример

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

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

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

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

Синтаксис

function fish_right_prompt
    ...
end

Описание

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

Несколько строк в fish_right_prompt не поддерживаются.

Пример

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

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

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

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

Описание

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

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

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

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

fish_vi_mode - включить режим vi

Синтаксис

fish_vi_mode

Описание

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

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

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

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

Синтаксис

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

Описание

for - это конструкция цикла. Он будет выполнять команды, указанные в COMMANDS, несколько раз. На каждой итерации локальная переменная, указанная в VARNAME, получает новое значение из VALUES. Если VALUES пуста, COMMANDS не будет выполняться вообще.

Пример

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

# would output:
foo
bar
baz

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

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

Синтаксис

funced [OPTIONS] NAME

Описание

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

Если переменная среды $VISUAL установлена, она будет использоваться как программа для редактирования функции. Если $VISUAL не установлена, но $EDITOR установлена, она будет использована. В противном случае будет использоваться встроенный редактор.

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

  • -e command или --editor command Открыть тело функции внутри текстового редактора, заданного командой (например, "vi"). Команда 'fish' будет использовать встроенный редактор.
  • -i или --interactive Открыть тело функции во встроенном редакторе.

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

funcsave - сохранение определения функции в каталог автозагрузки пользователя

Синтаксис

funcsave FUNCTION_NAME

Описание

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

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

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

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

Синопсис

function NAME [OPTIONS]; BODY; end

Описание

function создаёт новую функцию NAME с телом BODY.

Функция представляет собой список команд, которые будут выполнены при вводе имени функции как команды.

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

  • -a NAMES или --argument-names NAMES присваивает значение последующих аргументов командной строки именам, указанным в NAMES.
  • -d DESCRIPTION или --description=DESCRIPTION является описанием того, что делает функция, подходящим для описания автодополнения.
  • -w WRAPPED_COMMAND или --wraps=WRAPPED_COMMAND заставляет функцию наследовать автодополнение от указанной обернутой команды. Подробнее см. документацию по complete.
  • -e или --on-event EVENT_NAME сообщает fish о запуске этой функции при возникновении указанного имени события. Fish генерирует внутренние события с именами, например, при отображении приглашения.
  • -v или --on-variable VARIABLE_NAME сообщает fish о запуске этой функции при изменении значения переменной VARIABLE_NAME.
  • -j PGID или --on-job-exit PGID сообщает fish о запуске этой функции при завершении задачи с идентификатором группы PGID. Вместо PGID можно указать строку 'caller'. Это допустимо только в подстановке команд и приведёт к запуску обработчика при завершении задачи, которая создала эту подстановку команд.
  • -p PID или --on-process-exit PID сообщает fish о запуске этой функции при завершении дочернего процесса fish с идентификатором процесса PID.
  • -s или --on-signal SIGSPEC сообщает fish о запуске этой функции при получении сигнала SIGSPEC. SIGSPEC может быть номером сигнала или именем сигнала, таким как SIGHUP (или просто HUP).
  • -S или --no-scope-shadowing позволяет функции получать доступ к переменным вызывающих функций. Обычно любые переменные внутри функции, имеющие то же имя, что и переменные из вызывающей функции, «затеняются», и их содержимое независимо от вызывающей функции.
  • -V или --inherit-variable NAME создаёт моментальное изображение значения переменной NAME и определяет локальную переменную с тем же именем и значением при выполнении функции.

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

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

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

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

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

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

Пример

function ll
    ls -l $argv
end

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

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

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

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

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

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

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

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

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

Синопсис

functions [ -a | --all ] [ -n | --names ]
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 приводит к удалению указанных функций.
  • -n или --names выводит имена всех определённых функций.
  • -q или --query проверяет, существуют ли указанные функции.

По умолчанию 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 будет искать подходящий браузер.

Обратите внимание, что большинство встроенных команд отображают свою справку в терминале при использовании параметра --help.

Пример

help fg отображает документацию для встроенной команды fg.

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

history - отображение и управление историей команд

Синопсис

history search [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] [ --max=n ] [ --null ] [ "search string"... ]
history delete [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] "search string"...
history merge
history save
history clear
history ( -h | --help )

Описание

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

Для обеспечения обратной совместимости каждый подкоманда также может быть указан как длинный параметр. Например, вместо history search можно ввести history --search.

Эти длинные параметры устарели и будут удалены в будущих выпусках.

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

  • search возвращает элементы истории, соответствующие строке поиска. Если строка поиска не указана, возвращаются все элементы истории. Это действие по умолчанию, если не указана другая операция. Вы должны явно указать history search, если хотите выполнить поиск по одной из подкоманд. Если вы не укажете другой параметр поиска, будет использован параметр поиска --contains. Элементы упорядочены в обратном хронологическом порядке. Если стандартный вывод подключён к терминалу, вывод будет перенаправлен через ваш просмотрщик страниц функцией history. Функция history просто записывает результаты в стандартный вывод.
  • delete удаляет элементы истории. Без параметров --prefix или --contains, удаляется точное совпадение указанного текста. Если не указан --exact, отобразится приглашение перед удалением любых элементов, спрашивая, какие записи нужно удалить. Можно ввести слово «all», чтобы удалить все соответствующие записи. Можно ввести один идентификатор (число в квадратных скобках), чтобы удалить только эту запись. Можно ввести более одного идентификатора, разделённых пробелом, чтобы удалить несколько записей. Просто нажмите [Enter], чтобы ничего не удалять. Обратите внимание, что интерактивное поведение удаления — это функция history. Встроенная команда history поддерживает только удаление --exact --case-sensitive.
  • merge немедленно включает изменения в истории из других сессий. Обычно fish игнорирует изменения истории из сессий, начатых после текущей. Эта команда применяет эти изменения немедленно.
  • save немедленно записывает все изменения в файл истории. Оболочка автоматически сохраняет файл истории; этот параметр предназначен для внутреннего использования и обычно не должен использоваться пользователем.
  • clear очищает файл истории. Отображается приглашение перед удалением истории, спрашивая вас о подтверждении, хотите ли вы действительно очистить всю историю, если не использовать builtin history.

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

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

  • -C или --case-sensitive выполняет поиск с учетом регистра. По умолчанию поиск нечувствителен к регистру. Обратите внимание, что до fish 2.4.0 значение по умолчанию было чувствительным к регистру.
  • -c или --contains выполняет поиск или удаление элементов в истории, содержащих указанную строку текста. Это значение по умолчанию для флага --search. В настоящее время это не поддерживается флагом --delete.
  • -e или --exact выполняет поиск или удаление элементов в истории, которые точно совпадают с указанной строкой текста. Это значение по умолчанию для флага --delete. Обратите внимание, что по умолчанию соответствие нечувствительно к регистру. Если вам действительно нужен точный результат, включая регистр, необходимо использовать флаги -C или --case-sensitive.
  • -p или --prefix выполняет поиск или удаление элементов в истории, начинающихся с указанной строки текста. В настоящее время это не поддерживается флагом --delete.
  • -t или --show-time добавляет дату и время записи каждого элемента истории. По умолчанию используется формат strftime # cn. Можно указать другой формат; например, `–show-time='Y-m-d H:M:S 'or–show-time='aIp'. The short option,-tdoesn't accept a stftime format string; it only uses the default format. Any strftime format is allowed, includingsto get the raw UNIX seconds since the epoch. Note that–with-time` также разрешен, но устарел и будет удален в будущей версии.
  • -z или --null заставляет записи в истории, созданные операциями поиска, завершаться символом NUL, а не символом новой строки. Это позволяет обрабатывать вывод с помощью read -z, чтобы корректно обрабатывать многострочные записи истории.
  • -<number> -n <number> или --max=<number> ограничивает сопоставленные элементы истории первыми "n" соответствующими записями. Это допустимо только для history search.
  • -h или --help отображает справку по этой команде.

Пример

history --clear
# Deletes all history items

history --search --contains "foo"
# Outputs a list of all previous commands containing the string "foo".

history --delete --prefix "foo"
# Interactively deletes commands which start with "foo" from the history.
# You can select more than one entry by entering their IDs seperated by a space.

\subsection history-notes Notes

If you specify both `--prefix` and `--contains` the last flag seen is used.

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

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 выводит идентификатор процесса для каждого процесса во всех задачах.

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

Пример

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

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

math - Вычисление математических выражений

Синтаксис

math [-sN] EXPRESSION

Описание

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

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

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

  • -sN Устанавливает разрядность результата. N должна быть целым числом и по умолчанию равна нулю. Это просто устанавливает переменную bc scale в указанное значение. Обратите внимание, что вы не можете вставить пробел между -s и N.

Возвращаемые значения

Если предоставлены недопустимые опции или нет выражения, возвращаемое значение status равно двум. Если выражение недопустимо, возвращаемое значение status равно трём. Если bc возвращает результат 0 (буквально, а не 0.0 или аналогичные варианты), возвращаемое значение status равно одному, в противном случае оно равно нулю.

Примеры

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

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

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

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

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

Предупреждения

Обратите внимание, что оператор modulo (x % y) не определен для вычисления с плавающей точкой. Команда bc генерирует бессмысленный результат, а не ошибку и не завершается в этом случае. Не имеет значения, являются ли аргументы целыми числами; например, 10 % 4. Вы все равно получите неправильный результат. Не используйте флаг -sN с N, большим нуля, если хотите получить осмысленные ответы при использовании оператора modulo.

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

nextd - перейти вперед в истории каталогов

Синтаксис

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

Описание

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

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

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

Пример

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

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

prevd
# Working directory is now /usr/src

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

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

not - инвертировать код завершения задачи

Синтаксис

not COMMAND [OPTIONS...]

Описание

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

Пример

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

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

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

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

Синтаксис

open FILES...

Описание

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

Пример

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

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

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

Синтаксис

COMMAND1; or COMMAND2

Описание

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

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

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

Пример

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

make; and make install; or make clean

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

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

Синтаксис

popd

Описание

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

Пример

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

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

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

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

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

Синтаксис

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

Описание

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

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

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

Пример

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

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

prevd
# Working directory is now /usr/src

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

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

printf - вывод текста согласно строке формата

Синтаксис

printf format [argument...]

Описание

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

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

В отличие от echo, printf не добавляет новую строку, если это не указано в строке.

Допустимые спецификаторы формата:

  • %d: Аргумент будет использован как десятичное целое число (со знаком или без)
  • %i: Аргумент будет использован как целое число со знаком
  • %o: Восьмеричное беззнаковое целое число
  • %u: Десятичное беззнаковое целое число
  • %x или %X: Шестнадцатеричное беззнаковое целое число
  • %f, %g или %G: Число с плавающей точкой
  • %e или %E: Число с плавающей точкой в научной (XXXeYY) нотации
  • %s: Строка
  • %b: Как строка, интерпретируя обратные слеши, за исключением того, что восьмеричные обратные слеши имеют вид \0 или \0ooo.

%% обозначает буквальный символ "%".

Обратите внимание, что преобразование может завершиться ошибкой, например, "102.234" не может быть без потерь преобразован в целое число, что заставит printf вывести ошибку.

printf также понимает ряд обратных слешей:

  • \" двойная кавычка
  • \\ обратный слэш
  • \a сигнал (звонок)
  • \b возврат на один символ
  • \c больше не выводить
  • \e escape
  • \f подача формы
  • \n новая строка
  • \r возврат каретки
  • \t горизонтальная табуляция
  • \v вертикальная табуляция
  • \ooo восьмеричное число (ooo от 1 до 3 цифр)
  • \xhh шестнадцатеричное число (hhh от 1 до 2 цифр)
  • \uhhhh 16-битный символ Unicode (hhhh - 4 цифры)
  • \Uhhhhhhhh 32-битный символ Unicode (hhhhhhhh - 8 цифр)

Аргумент format повторно используется столько раз, сколько необходимо для преобразования всех предоставленных аргументов. Если спецификатор формата не подходит для данного аргумента, выводится ошибка. Например, `printf 'd' "102.234"` выводит ошибку, так как "102.234" не может быть отформатирован как целое число.

Этот файл был импортирован из printf в GNU Coreutils версии 6.9. Если вы хотите использовать более новую версию printf, например, поставляемую с вашей операционной системой, попробуйте command printf.

Пример

printf '%s\t%s\n' flounder fish

Выведет «flounder fish» (разделенные символом табуляции), за которым следует символ новой строки. Это полезно для написания завершающих символов, так как fish ожидает, что скрипты завершения выведут опцию и описание, разделённые символом табуляции.

printf '%s:%d' "Number of bananas in my pocket" 42

Выведет «Количество бананов в моём кармане: 42», без новой строки.

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

prompt_pwd - вывести pwd, подходящий для приглашения

Синтаксис

prompt_pwd

Описание

prompt_pwd — это функция для вывода текущего каталога в формате, подходящем для приглашений. Она заменит домашний каталог на "~" и сократит каждый компонент пути, кроме последнего, до значения по умолчанию в один символ.

Для изменения количества символов на каждый компонент пути установите $fish_prompt_pwd_dir_length в нужное значение. Установка значения 0 или недопустимого значения отключит укорочение.

Примеры

> cd ~/
> echo $PWD
/home/alfa

> prompt_pwd
~

> cd /tmp/banana/sausage/with/mustard
> prompt_pwd
/t/b/s/w/mustard

> set -g fish_prompt_pwd_dir_length 3
> prompt_pwd
/tmp/ban/sau/wit/mustard

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

psub - выполнение подстановки процесса

Синтаксис

COMMAND1 ( COMMAND2 | psub [-f] [-s SUFFIX])

Описание

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

Если переключатель -f или --file задан для psub, psub будет использовать обычный файл вместо именованной трубы для связи с вызывающим процессом. Это замедлит psub значительно, когда речь идёт о больших объёмах данных, но даёт преимущество, что процесс чтения может искать в потоке.

Если переключатель -s или ---suffix задан, psub добавит SUFFIX к имени файла.

Пример

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

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

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

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

Синтаксис

pushd [DIRECTORY]

Описание

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

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

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

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

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

Пример

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

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

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

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

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

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

pwd - вывод текущего каталога

Синтаксис

pwd

Описание

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

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

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

random - генерировать случайное число

Синтаксис

random [SEED]

Описание

random выводит псевдослучайное число от 0 до 32767 включительно. Даже игнорируя очень узкий диапазон значений, вы не должны предполагать, что это генерирует действительно случайные значения в этом диапазоне. Не используйте это значение для криптографических целей и будьте осторожны при обработке коллизий: одно и то же случайное число может появляться более одного раза в заданном экземпляре fish.

Если предоставлено значение SEED, оно используется для инициализации генератора псевдослучайных чисел, и вывод не будет произведён. Это может быть полезно для отладки, где желательно получить одну и ту же последовательность псевдослучайных чисел несколько раз. Если генератор псевдослучайных чисел вызывается без предварительной инициализации, текущее время будет использоваться в качестве начального значения.

Пример

Следующий код будет отсчитывать от случайного числа до 1:

for i in (seq (random) -1 1)
    echo $i
    sleep
end

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

read - читать строку ввода в переменные

Синтаксис

read [OPTIONS] [VARIABLES...]

Описание

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

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

  • -c CMD или --command=CMD устанавливает начальную строку в буфере команды режима интерактивности в CMD.
  • -g или --global делает переменные глобальными.
  • -l или --local делает переменные локальными.
  • -m NAME или --mode-name=NAME указывает, что имя NAME должно использоваться для сохранения/загрузки файла истории. Если NAME — fish, то будет доступна обычная история fish.
  • -n NCHARS или --nchars=NCHARS заставляет read возвращаться после чтения NCHARS символов, а не ждать всей строки ввода.
  • -p PROMPT_CMD или --prompt=PROMPT_CMD использует вывод оболочечной команды PROMPT_CMD в качестве приглашения для интерактивного режима. Команда по умолчанию — set_color green; echo read; set_color normal; echo "> ".
  • -R RIGHT_PROMPT_CMD или --right-prompt=RIGHT_PROMPT_CMD использует вывод оболочечной команды RIGHT_PROMPT_CMD в качестве правого приглашения для интерактивного режима. Нет команды правого приглашения по умолчанию.
  • -s или --shell включает подсветку синтаксиса, автодополнение и завершение команды, подходящие для ввода кода оболочки в интерактивном режиме.
  • -u или --unexport предотвращает экспорт переменных в дочерние процессы (поведение по умолчанию).
  • -U или --universal делает указанную оболочечную переменную универсальной.
  • -x или --export экспортирует переменные в дочерние процессы.
  • -a или --array сохраняет результат в виде массива.
  • -z или --null считывает до NUL вместо новой строки. Отключает интерактивный режим.

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

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

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

Пример

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

echo hello|read foo

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

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

Синтаксис

realpath path

Описание

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

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

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

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

Синтаксис

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

Описание

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

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

Пример

Следующий код — реализация команды false как функции fish

function false
    return 1
end

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

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

Синтаксис

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

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример

set -xg
# Prints all global, exported variables.

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

set -e smurf
# Removes the variable $smurf

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

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

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

set_color - установка цвета терминала

Синтаксис

set_color [OPTIONS] VALUE

Описание

set_color используется для управления цветом и стилем текста в терминале. VALUE соответствует зарезервированному имени цвета, такому как красный, или значению цвета RGB, заданному как 3 или 6 шестнадцатеричных цифр. Формы br-, как в 'bright', — это варианты с полной яркостью 8 стандартных цветов с низкой яркостью на многих терминалах. brblack имеет более высокую яркость, чем black — в сторону серого. Специальное ключевое слово normal сбрасывает форматирование текста до значений по умолчанию терминала.

Допустимые цвета включают:

  • чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой, белый
  • brчёрный, brкрасный, brзелёный, bryёлтый, brсиний, brпурпурный, brголубой, brбелый

Можно использовать значение RGB с тремя или шестью шестнадцатеричными цифрами, например A0FF33 или f2f. fish выберет наиболее близкий поддерживаемый цвет. Значение с тремя цифрами эквивалентно указанию каждой цифры дважды; например, set_color 2BC эквивалентно set_color 22BBCC. Шестнадцатеричные значения RGB могут быть в нижнем или верхнем регистре. В зависимости от возможностей вашего терминала (и уровня поддержки set_color для него) фактический цвет может быть приближен к ближайшему соответствующему зарезервированному имени цвета, или set_color может не повлиять на цвет. Второй цвет может быть задан как желаемый цвет по умолчанию. Например, set_color 124212 brсиний указывает set_color использовать brсиний, если терминал не способен отобразить точно нужный оттенок серого. Это очень полезно, когда терминал с 8 или 16 цветами в противном случае может не использовать цвет.

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

  • -b, --background ЦВЕТ устанавливает цвет фона.
  • -c, --print-colors выводит список 16 именованных цветов.
  • -o, --bold устанавливает режим жирного шрифта.
  • -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 не поддерживается.

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

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

Синтаксис

source FILENAME [ARGUMENTS...]

Описание

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

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

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

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

Пример

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

Ограничения

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

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

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

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

status [OPTION]

Описание

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

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

  • -c или --is-command-substitution возвращает 0, если fish в данный момент выполняет подстановку команды.
  • -b или --is-block возвращает 0, если fish в данный момент выполняет блок кода.
  • -i или --is-interactive возвращает 0, если fish интерактивна — то есть подключена к клавиатуре.
  • -l или --is-login возвращает 0, если fish — оболочка входа в систему — то есть если fish должна выполнить задачи входа в систему, такие как настройка пути.
  • --is-full-job-control возвращает 0, если полное управление задачами включено.
  • --is-interactive-job-control возвращает 0, если интерактивное управление задачами включено.
  • --is-no-job-control возвращает 0, если управление задачами отключено.
  • -f или --current-filename выводит имя файла текущего выполняемого скрипта.
  • -n или --current-line-number выводит номер строки текущего выполняемого скрипта.
  • -j CONTROLTYPE или --job-control=CONTROLTYPE устанавливает тип управления задачами, который может быть none, full, или interactive.
  • -t или --print-stack-trace выводит стек вызовов всех функций в стеке вызовов.

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

string - работа со строками

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

string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
           [STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
             [STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
            [(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
             [(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
               [(-q | --quiet)] PATTERN REPLACEMENT [STRING...]

Описание

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

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

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

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

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

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

  • length сообщает длину каждого строкового аргумента в символах. Код возврата: 0, если хотя бы одна непустая строка была задана, или 1 в противном случае.
  • sub выводит подстроку каждого строкового аргумента. Начало подстроки можно указать с помощью -s или --start, за которым следует значение индекса, начинающегося с 1. Положительные значения индекса относятся к началу строки, а отрицательные значения индекса — к концу строки. Значение по умолчанию для начала — 1. Длина подстроки может быть указана с помощью -l или --length. Если длина не указана, подстрока продолжается до конца каждой строки. Код возврата: 0, если хотя бы одна операция с подстрокой была выполнена, 1 в противном случае.
  • split разбивает каждую строку по разделителю SEP, который может быть пустой строкой. Если -m или --max указано, то выполняется не более MAX разбиений для каждой строки. Если -r или --right указано, разбиение выполняется справа налево. Это полезно в сочетании с -m или --max. Код возврата: 0, если было выполнено хотя бы одно разбиение, или 1 в противном случае.
  • join объединяет свои строковые аргументы в одну строку, разделенную разделителем SEP, который может быть пустой строкой. Код возврата: 0, если выполнено хотя бы одно объединение, или 1 в противном случае.
  • trim удаляет начальные и конечные пробелы из каждой строки. Если -l или --left задано, удаляются только начальные пробелы. Если -r или --right задано, удаляются только конечные пробелы. Переключатель -c или --chars приводит к удалению символов в CHARS вместо пробелов. Код возврата: 0, если хотя бы один символ был удалён, или 1 в противном случае.
  • escape экранирует каждую строку таким образом, чтобы её можно было передать обратно eval, чтобы получить исходный аргумент. По умолчанию все специальные символы экранируются, а кавычки используются для упрощения вывода, когда это возможно. Если -n или --no-quoted заданы, упрощенный формат с кавычками не используется. Код возврата: 0, если хотя бы одна строка была экранирована, или 1 в противном случае.
  • match проверяет каждую строку на соответствие PATTERN и выводит соответствующие подстроки. Только первое совпадение для каждой строки отображается, если не заданы -a или --all, в этом случае отображаются все совпадения. Сопоставление может быть выполнено без учёта регистра с помощью -i или --ignore-case. Если -n или --index задано, каждое совпадение отображается как позиция начала (с 1) и длина. По умолчанию PATTERN интерпретируется как шаблон совпадения glob, применяемый ко всему строковому аргументу. Шаблон glob считается допустимым совпадением только в том случае, если он соответствует всей строке. Если -r или --regex задано, PATTERN интерпретируется как Perl-совместимый регулярное выражение, которое не обязательно должно соответствовать всей строке. Для регулярного выражения, содержащего группы захвата, для каждого совпадения будет сообщено несколько элементов: один для всего совпадения и один для каждой группы захвата. Если используется —invert или -v, то выбранные строки будут только теми, которые не соответствуют данному шаблону glob или регулярному выражению. Код возврата: 0, если найдено хотя бы одно совпадение, или 1 в противном случае.
  • replace аналогично match, но заменяет неперекрывающиеся совпадающие подстроки строкой замены и выводит результат. По умолчанию PATTERN рассматривается как литеранльная подстрока для сопоставления. Если -r или --regex задано, PATTERN интерпретируется как Perl-совместимое регулярное выражение, а REPLACEMENT может содержать управляющие последовательности в стиле C, такие как \t, а также ссылки на группы захвата по номеру или имени, такие как $n или ${n}. Код возврата: 0, если была выполнена хотя бы одна замена, или 1 в противном случае.

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

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

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

Примеры

> string length 'hello, world'
12

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

> string sub -s 2 -l 2 abcde
bc

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

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

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

> string trim --right --chars=yz xyzzy zany
x
zan
> echo \x07 | string escape
\cg

Примеры совпадений Glob

> string match '?' a
a

> string match 'a*b' axxb
axxb

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

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

Примеры совпадений 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

Примеры замены (литеральный текст)

> 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

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

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.

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

  • -b FILE возвращает true, если FILE является блочным устройством.
  • -c FILE возвращает true, если FILE является символьным устройством.
  • -d FILE возвращает true, если FILE является каталогом.
  • -e FILE возвращает true, если FILE существует.
  • -f FILE возвращает true, если FILE является обычным файлом.
  • -g FILE возвращает true, если у FILE установлен бит set-group-ID.
  • -G FILE возвращает true, если FILE существует и имеет тот же идентификатор группы, что и текущий пользователь.
  • -L FILE возвращает true, если FILE является символической ссылкой.
  • -O FILE возвращает true, если FILE существует и принадлежит текущему пользователю.
  • -p FILE возвращает true, если FILE является именованной трубой.
  • -r FILE возвращает true, если FILE помечен как читаемый.
  • -s FILE возвращает true, если размер FILE больше нуля.
  • -S FILE возвращает true, если FILE является сокетом.
  • -t FD возвращает true, если дескриптор файла FD является терминалом (TTY).
  • -u FILE возвращает true, если у FILE установлен бит set-user-ID.
  • -w FILE возвращает true, если FILE помечен как записываемый; обратите внимание, что это не проверяет, является ли файловая система только для чтения.
  • -x FILE возвращает true, если FILE помечен как исполняемый.

Операторы для текстовых строк

  • STRING1 = STRING2 возвращает true, если строки STRING1 и STRING2 идентичны.
  • STRING1 != STRING2 возвращает true, если строки STRING1 и STRING2 не идентичны.
  • -n STRING возвращает true, если длина STRING не равна нулю.
  • -z STRING возвращает true, если длина STRING равна нулю.

Операторы для сравнения и проверки чисел

  • NUM1 -eq NUM2 возвращает true, если NUM1 и NUM2 численно равны.
  • NUM1 -ne NUM2 возвращает true, если NUM1 и NUM2 численно не равны.
  • NUM1 -gt NUM2 возвращает true, если NUM1 больше NUM2.
  • NUM1 -ge NUM2 возвращает true, если NUM1 больше или равно NUM2.
  • NUM1 -lt NUM2 возвращает true, если NUM1 меньше NUM2.
  • NUM1 -le NUM2 возвращает true, если NUM1 меньше или равно NUM2.

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

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

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

Выражения можно инвертировать, используя оператор !:

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

Распространённое сравнение — со значением $status:

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

Стандарты

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

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

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

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

trap - выполнение действия при получении оболочкой сигнала

Синтаксис

trap [OPTIONS] [[ARG] SIGSPEC ... ]

Описание

trap — обёртка вокруг механизма доставки событий в fish. Она существует для обратной совместимости с POSIX оболочками. Для других целей рекомендуется определять обработчик событий.

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

  • ARG — команда, которая будет выполнена при поступлении сигнала.
  • SIGSPEC — имя сигнала для перехвата.
  • -l или --list-signals печатают список имён сигналов.
  • -p или --print печатают все определённые обработчики сигналов.

Если ARG и SIGSPEC оба указаны, ARG — команда, которая будет выполнена при получении сигнала, указанного в SIGSPEC.

Если ARG отсутствует (и есть один SIGSPEC) или -, каждый указанный сигнал сбрасывается до первоначального состояния (состояния при запуске оболочки). Если ARG — пустая строка, каждый сигнал, указанный в SIGSPEC, игнорируется оболочкой и командами, которые она вызывает.

Если ARG отсутствует, а -p указана, отображаются команды trap, связанные с каждым SIGSPEC. Если нет аргументов или указан только -p, trap печатает список команд, связанных с каждым сигналом.

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

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

Пример

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

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

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

Синтаксис

true

Описание

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

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

type - указание способа интерпретации команды

Синтаксис

type [OPTIONS] NAME [NAME ...]

Описание

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

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

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

Пример

> type fg
fg is a builtin

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

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

Синтаксис

ulimit [OPTIONS] [LIMIT]

Описание

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

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

  • -c или --core-size: максимальный размер создаваемых файлов ядра. Установив это ограничение в ноль, можно отключить дампы ядра.
  • -d или --data-size: максимальный размер сегмента данных процесса.
  • -f или --file-size: максимальный размер файлов, созданных оболочкой.
  • -l или --lock-size: максимальный размер, который может быть заблокирован в памяти.
  • -m или --resident-set-size: максимальный размер постоянного набора.
  • -n или --file-descriptor-count: максимальное количество открытых дескрипторов файлов (на большинстве систем это значение нельзя установить).
  • -s или --stack-size: максимальный размер стека.
  • -t или --cpu-time: максимальное время использования процессора в секундах.
  • -u или --process-count: максимальное количество процессов, доступных одному пользователю.
  • -v или --virtual-memory-size Максимальный объем виртуальной памяти, доступной оболочке.

Обратите внимание, что не все эти ограничения доступны во всех операционных системах.

Значение ограничения может быть числом в указанной для ресурса единице измерения или одним из специальных значений hard, soft, или unlimited, которые обозначают текущее жёсткое ограничение, текущее гибкое ограничение и отсутствие ограничения соответственно.

Если задано ограничение, это новое значение указанного ресурса. Если ни один параметр не указан, предполагается -f. Значения указаны в килобайтах, за исключением -t, которое указано в секундах, и -n, -u, которые являются значениями без масштабирования. Код возврата равен 0, если не указан недопустимый параметр или аргумент, или если при установке нового ограничения произошла ошибка.

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

  • -H или --hard устанавливает жёсткое ограничение ресурса
  • -S или --soft устанавливает гибкое ограничение ресурса

Жёсткое ограничение может быть только уменьшено. После его установки его нельзя увеличить; гибкое ограничение можно увеличить до значения жёсткого ограничения. Если ни -H, ни -S не указаны, при назначении нового значения ограничения обновляются и гибкое, и жёсткое ограничения, а при отображении текущего значения используется гибкое ограничение.

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

  • -a или --all выводит все текущие ограничения

Реализация fish команды ulimit должна вести себя идентично реализации в bash, за исключением этих отличий:

  • Fish ulimit поддерживает длинные опции в стиле GNU для всех переключателей
  • Fish ulimit не поддерживает опцию -p для получения размера канала. Реализация в bash включает проверку на этапе компиляции, которая эмпирически определяет это число, записывая в канал и ожидая SIGPIPE. Fish этого не делает, так как этот метод определения размера канала ненадёжен. В зависимости от версии bash могут быть и другие дополнительные ограничения, которые отсутствуют в fish.
  • Fish ulimit не поддерживает получение или установку нескольких ограничений в одной команде, за исключением вывода всех значений с использованием переключателя -a

Пример

ulimit -Hs 64 устанавливает жёсткое ограничение размера стека на 64 КБ.

Возврат к списку команд.

umask - установка или получение маски создания файлов

Синтаксис

umask [OPTIONS] [MASK]

Описание

umask отображает и изменяет "umask", или маску создания файлов, которая используется для ограничения доступа по умолчанию к файлам.

Маска umask может быть выражена либо как восьмеричное число, представляющее права, которые будут удалены по умолчанию, либо символически, представляющее только права, которые будут предоставлены по умолчанию.

Права доступа описаны в справке для программы chmod(1).

Без параметров выводится текущая маска создания файлов в восьмеричном формате.

  • -h или --help выводит это сообщение.
  • -S или --symbolic выводит umask в символической форме вместо восьмеричной.
  • -p или --as-command выводит umask в форме, которая может быть повторно использована в качестве входных данных

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

Если задана символическая маска, следует указывать желаемые биты разрешений, а не их отрицания. Символическая маска — это список прав, разделённых запятыми. Каждое право состоит из трёх частей:

  • Первая часть указывает, к кому относится этот набор прав, и может быть одной из u, g, o или a, где u задаёт владельца файла, g задаёт владельца группы файла, o задаёт права других пользователей, и a задаёт, что должны быть изменены все три.
  • Вторая часть права указывает режим и может быть одной из =, + или -, где = указывает, что права должны быть установлены на новое значение, + указывает, что указанное право должно быть добавлено к тем, что были указаны ранее, и - указывает, что указанные права должны быть удалены из тех, что были указаны ранее.
  • Третья часть права указывает, какие права должны быть изменены, и может быть любой комбинацией r, w и x, представляющих чтение, запись и выполнение.

Если первая и вторая части пропущены, они предполагаются a и = соответственно. Например, r,u+w означает, что все пользователи должны иметь право на чтение, а владелец файла также должен иметь право на запись.

Обратите внимание, что символические маски в настоящее время не работают должным образом.

Пример

umask 177 или umask u=rw устанавливает маску создания файлов на чтение и запись для владельца и отсутствие прав для всех других пользователей.

Возврат к списку команд.

vared - интерактивное редактирование значения переменной окружения

Синтаксис

vared VARIABLE_NAME

Описание

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

Пример

vared PATH[3] редактирует третий элемент массива PATH

Возврат к списку команд.

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

Синтаксис

while CONDITION; COMMANDS...; end

Описание

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

Если код выхода CONDITION не равен 0 в первом цикле, COMMANDS не будет выполняться вообще.

Для сложных условий можно использовать and или or. Ещё более сложный контроль можно реализовать с помощью while true, содержащего break.

Пример

while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end
# outputs 'file exists' at 10 second intervals as long as the file foo.txt or bar.txt exists.

Возврат к списку команд.

© 2005–2009 Axel Liljencrantz
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/2.4/commands.html

Spec-Zone.ru

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