Справочник команд
fish поставляется с большим количеством встроенных команд, функций shellscript и внешних команд. Все они описаны ниже.
Практически все команды fish реагируют на опции -h или --help, чтобы отобразить соответствующую справку, также доступную с помощью команд help и man, например:
echo -h echo --help # Prints help to the terminal window man echo # Displays the man page in the system pager # (normally 'less', 'more' or 'most'). help echo # Open a web browser to show the relevant documentation
abbr - управление сокращениями fish
Синопсис
abbr --add word phrase... abbr --rename word new_word abbr --show abbr --list abbr --erase word
Описание
abbr управляет списком сокращений, которые будет расширять fish.
Сокращения — это определённые пользователем последовательности символов или слов, которые заменяются более длинными фразами после их ввода. Например, часто используемая команда, такая как git checkout, может быть сокращена до gco. После ввода gco и нажатия Пробел или Ввод, полное содержимое git checkout появится в командной строке.
Сокращения хранятся в переменной с именем fish_user_abbreviations. Она автоматически создаётся как универсальная переменная при первом создании сокращения. Если вы хотите, чтобы ваши сокращения были приватными для конкретной сессии fish, вы можете добавить следующее в файл *~/.config/fish/config.fish* перед определением первого сокращения:
if status --is-interactive
set -g fish_user_abbreviations
abbr --add first 'echo my first abbreviation'
abbr --add second 'echo my second abbreviation'
# etcetera
end
Вы можете создавать сокращения непосредственно в командной строке, и они будут автоматически сохранены и станут видимыми для других сессий fish, если fish_user_abbreviations является универсальной переменной. Если вы оставите переменную универсальной, abbr --add-выражения в config.fish не сделают ничего, кроме незначительного замедления запуска.
Опции
Доступны следующие параметры:
-
-a WORD PHRASEили--add WORD PHRASEДобавляет новое сокращение, заставляя WORD расширяться до PHRASE. -
-r WORD NEW_WORDили--rename WORD NEW_WORDПереименовывает сокращение, с WORD на NEW_WORD. -
-sили--showОтображает все сокращённые слова и их расширенные фразы в формате, подходящем для экспорта и импорта. -
-lили--listВыводит список всех сокращённых слов. -
-e WORDили--erase WORDУдаляет сокращение WORD.
Примечание: версия fish 2.1 поддерживала -a WORD=PHRASE. Этот синтаксис теперь устарел, но всё ещё будет преобразован.
Примеры
abbr -a gco git checkout
Добавьте новое сокращение, где gco будет заменено на git checkout.
abbr -r gco gch
Переименовать существующее сокращение с gco на gch.
abbr -e gco
Удалить сокращение gco.
ssh another_host abbr -s | source
Импортировать сокращения, определённые на another_host через SSH.
Вернуться к списку команд.
alias - создание функции
Синопсис
alias alias NAME DEFINITION alias NAME=DEFINITION
Описание
alias — это простой обёртку для встроенной команды function, которая создаёт функцию, обёртывающую команду. Она имеет похожий синтаксис с POSIX оболочкой alias. Для других целей рекомендуется определять функцию.
fish отмечает функции, созданные командой alias, включая используемую для их создания команду в описании функции. Вы можете перечислить функции, созданные командой alias, выполнив alias без аргументов. Они должны быть удалены с помощью functions -e.
-
NAME— имя псевдонима -
DEFINITION— фактическая команда для выполнения. Строка$argvбудет добавленна.
Вы не можете создать псевдоним для функции с таким же именем. Обратите внимание, что пробелы необходимо экранировать при вызове alias точно так же, как и в командной строке, _даже внутри цитированных частей_.
Пример
Следующий код создаст rmi, который каждый раз при вызове запускает rm с дополнительными аргументами.
alias rmi="rm -i"
# This is equivalent to entering the following function:
function rmi --wraps rm --description 'alias rmi=rm -i'
rm -i $argv
end
# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":
alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'
Вернуться к списку команд.
and - условное выполнение команды
Синопсис
COMMAND1; and COMMAND2
Описание
and используется для выполнения команды, если текущий код выхода (установленный предыдущей командой) равен 0.
Выражения and могут использоваться в качестве части условия в блоке if или while. Смотрите документацию для if и while для примеров.
and не изменяет текущий код выхода. Код выхода последней команды в фоновом режиме всегда доступен с помощью переменной $status.
Пример
Следующий код выполняет команду make для сборки программы. Если сборка прошла успешно, код выхода make равен 0, и программа устанавливается. Если любой из шагов завершился неудачей, код выхода равен 1, и выполняется make clean, который удаляет файлы, созданные процессом сборки.
make; and make install; or make clean
Вернуться к списку команд.
begin - начать новый блок кода
Синопсис
begin; [COMMANDS...;] end
Описание
begin используется для создания нового блока кода.
Блок выполняется безусловно. begin; ...; end эквивалентно if true; ...; end.
begin используется для группировки нескольких команд в блок. Это позволяет ввести новую область видимости переменных, перенаправить входные или выходные данные набора команд как группы или указать приоритет при использовании условных команд, таких как and.
begin не изменяет текущий код выхода.
Пример
Следующий код задаёт ряд переменных в области видимости блока. Поскольку переменные задаются внутри блока и имеют локальную область видимости, они автоматически удалятся по завершении блока.
begin
set -l PIRATE Yarrr
...
end
echo $PIRATE
# This will not output anything, since the PIRATE variable
# went out of scope at the end of the block
В следующем коде все выходные данные перенаправляются в файл out.html.
begin
echo $xml_header
echo $html_header
if test -e $file
...
end
...
end > out.html
Вернуться к списку команд.
bg - отправка задач в фоновый режим
Синопсис
bg [PID...]
Описание
bg отправляет задачи в фоновый режим, возобновляя их, если они приостановлены. Задача в фоновом режиме выполняется одновременно с fish и не имеет доступа к клавиатуре. Если задача не указана, последняя использованная задача помещается в фоновый режим. Если указан PID, задачи с указанными идентификаторами групп процессов помещаются в фоновый режим.
Идентификатор процесса желаемой задачи обычно находится с помощью расширения процесса.
Пример
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 и другой символ отправляет этот символ с префиксом символа экранирования, привязки клавиш Alt могут быть записаны с использованием последовательности экранирования \e. Например, Alt-w можно записать как \ew. Символ управления можно записать аналогичным образом, используя последовательность экранирования \c, например, Управление-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 о необходимости перерисовки.
Если предоставляется несколько COMMANDs, они все выполняются в указанном порядке при нажатии клавиши.
Если SEQUENCE не указан, печатаются все привязки (или только привязки в указанном MODE). Если SEQUENCE указан без COMMAND, печатается только соответствующая привязка.
Привязки клавиш по умолчанию не сохраняются между сеансами. Простые bind-выражения в config.fish не окажут никакого эффекта, потому что они обрабатываются до установки стандартных привязок клавиш. Чтобы сохранить пользовательские привязки клавиш, поместите bind-выражения в функцию с именем fish_user_key_bindings, которая будет автозагружаться.
Привязки клавиш могут использовать «режимы», что имитирует модальное поведение ввода Ви. Стандартный режим — «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-buffer, переместиться к началу буфера, т.е. к началу первой строки -
beginning-of-history, переместиться к началу истории -
beginning-of-line, переместиться к началу строки -
begin-selection, начать выделение текста -
capitalize-word, сделать текущее слово заглавным -
complete, предположить оставшуюся часть текущего токена -
complete-and-search, вызвать постраничный поиск в вариантах завершения (для удобства, это также перемещает назад в постраничном просмотре завершения) -
delete-char, удалить один символ справа от курсора -
downcase-word, сделать текущее слово строчным -
end-of-buffer, переместиться к концу буфера, т.е. к концу первой строки -
end-of-history, переместиться к концу истории -
end-of-line, переместиться к концу строки -
end-selection, завершить выделение текста -
forward-bigword, переместить одно слово, разделённое пробелами, вправо -
forward-char, переместить курсор на одну позицию вправо -
forward-word, переместить одно слово вправо -
history-search-backward, поиск в истории по предыдущему совпадению -
history-search-forward, поиск в истории по следующему совпадению -
kill-bigword, переместить следующее слово, разделённое пробелами, в буфер обмена -
kill-line, переместить всё от курсора до конца строки в буфер обмена -
kill-selection, переместить выделенный текст в буфер обмена -
kill-whole-line, переместить строку в буфер обмена -
kill-word, переместить следующее слово в буфер обмена -
suppress-autosuggestion, удалить текущее автопредложение -
swap-selection-start-stop, перейти к другому концу выделенного текста без изменения выделения -
transpose-chars, поменять местами два символа слева от курсора -
transpose-words, поменять местами два слова слева от курсора -
upcase-word, сделать текущее слово заглавным -
yank, вставить последнюю запись из буфера обмена в буфер -
yank-pop, перейти к предыдущей записи буфера обмена
Примеры
bind \cd 'exit'
Приводит к завершению fish при нажатии Control-D.
bind -k ppage history-search-backward
Выполняет поиск в истории при нажатии клавиши Page Up.
set -g fish_key_bindings fish_vi_key_bindings bind -M insert \cc kill-whole-line force-repaint
Включает Vi-привязки и перепривязывает Control-C к очистке строки ввода.
Особое случае: символ escape
Клавиша 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-выражение.
Обратите внимание, что подстановки команд в 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 [OPTIONS] COMMANDNAME [ARGS...]
Описание
command заставляет оболочку выполнить программу COMMANDNAME и игнорировать любые функции или встроенные команды с таким же именем.
Доступны следующие опции:
-
-sили--searchвозвращает имя файла диска, который будет выполнен, или ничего, если файл с указанным именем не найден в$PATH.
С опцией -s, command обрабатывает каждый аргумент как отдельную команду для поиска и устанавливает код выхода в 0, если любая из указанных команд найдена, или в 1, если ни одна команда не найдена. Кроме того, передача опции -q или --quiet предотвращает вывод каких-либо путей, как в случае type -q, для тестирования только кода выхода.
Для обеспечения базовой совместимости с POSIX command, флаг -v распознаётся как псевдоним для -s.
Примеры
command ls заставляет fish выполнить программу ls, даже если существует функция ls.
command -s ls возвращает путь к программе ls.
Назад к списку команд.
commandline - установка или получение текущего буфера командной строки
Синтаксис
commandline [OPTIONS] [CMD]
Описание
commandline можно использовать для установки или получения текущего содержимого буфера командной строки.
Без параметров, commandline возвращает текущее значение командной строки.
С указанием CMD, буфер командной строки очищается и заменяется содержимым CMD.
Доступны следующие опции:
-
-Cили--cursorустанавливают или получают текущую позицию курсора, а не содержимое буфера. Если аргумент не указан, выводится текущая позиция курсора, в противном случае аргумент интерпретируется как новая позиция курсора. -
-fили--functionвнедряют функции readline в читатель. Эта опция не может быть использована совместно с другими опциями. Она заставит все дополнительные аргументы интерпретироваться как функции readline, и эти функции будут внедрены в читатель, так что они будут возвращены читателю до того, как будут прочитаны любые дополнительные нажатия клавиш.
Следующие опции изменяют способ, которым commandline обновляет буфер командной строки:
-
-aили--appendне удаляют текущую командную строку, добавляют указанную строку в конец. -
-iили--insertне удаляют текущую командную строку, вставляют указанную строку в текущую позицию курсора. -
-rили--replaceудаляют текущую командную строку и заменяют её указанной строкой (по умолчанию).
Следующие опции изменяют часть командной строки, которая выводится или обновляется:
-
-bили--current-bufferвыбирают весь буфер (по умолчанию). -
-jили--current-jobвыбирают текущую задачу. -
-pили--current-processвыбирают текущий процесс. -
-tили--current-tokenвыбирают текущий токен.
Следующие опции изменяют способ, которым commandline выводит текущий буфер командной строки:
-
-cили--cut-at-cursorвыводят только выделенный фрагмент до текущей позиции курсора. -
-oили--tokenizeтокенизируют выделение и выводят один строковый токен на строку.
Если commandline вызывается во время вызова для завершения заданной строки с помощью complete -C STRING, commandline будет рассматривать указанную строку как текущее содержимое командной строки.
Следующие опции выводят метаданные о состоянии командной строки:
-
-Lили--lineвыводят строку, на которой находится курсор, причём верхняя строка имеет номер 1. -
-Sили--search-modeвозвращает true, если командная строка выполняет поиск в истории. -
-Pили--paging-modeвозвращает true, если командная строка отображает содержимое пейджера, такие как дополнения с помощью табуляции.
Пример
commandline -j $history[3] заменяет задачу под курсором третьим элементом из истории командной строки.
Если командная строка содержит
> echo $flounder >&2 | less; and echo $catfish
(с курсором на "о" в "flounder")
Тогда следующие вызовы ведут себя так:
> commandline -t $flounder > commandline -ct $fl > commandline -b ## or just commandline echo $flounder >&2 | less; and echo $catfish > commandline -p echo $flounder >&2 > commandline -j echo $flounder >&2 | less
Назад к списку команд.
complete - редактирование специфичных для команды дополнений с табуляцией
Синтаксис
complete ( -c | --command | -p | --path ) COMMAND
[( -c | --command | -p | --path ) COMMAND]...
[( -e | --erase )]
[( -s | --short-option ) SHORT_OPTION]...
[( -l | --long-option | -o | --old-option ) LONG_OPTION]...
[( -a | --arguments ) OPTION_ARGUMENTS]
[( -f | --no-files )]
[( -r | --require-parameter )]
[( -x | --exclusive )]
[( -w | --wraps ) WRAPPED_COMMAND]...
[( -n | --condition ) CONDITION]
[( -d | --description ) DESCRIPTION]
complete ( -C[STRING] | --do-complete[=STRING] )
Описание
Для ознакомления со спецификацией дополнений обратитесь к созданию собственных дополнений в руководстве fish.
-
COMMAND— имя команды, для которой добавляется дополнение. -
SHORT_OPTION— односимвольная опция для команды. -
LONG_OPTION— многосимвольная опция для команды. -
OPTION_ARGUMENTS— параметр, содержащий список возможных аргументов опции, разделённых пробелами, который может содержать подстановки команд. -
DESCRIPTION— описание того, что делает опция и/или аргументы опции. -
-c COMMANDили--command COMMANDуказывает, чтоCOMMAND— имя команды. -
-p COMMANDили--path COMMANDуказывает, чтоCOMMAND— абсолютный путь к программе (возможно, содержащий подстановочные знаки). -
-eили--eraseудаляет указанное дополнение. -
-s SHORT_OPTIONили--short-option=SHORT_OPTIONдобавляет короткую опцию в список дополнений. -
-l LONG_OPTIONили--long-option=LONG_OPTIONдобавляет опцию в стиле GNU в список дополнений. -
-o LONG_OPTIONили--old-option=LONG_OPTIONдобавляет опцию старого стиля в список дополнений (см. подробности ниже). -
-a OPTION_ARGUMENTSили--arguments=OPTION_ARGUMENTSдобавляет указанные аргументы опции в список дополнений. -
-fили--no-filesуказывает, что опции, задаваемые этим дополнением, не могут следовать за именем файла. -
-rили--require-parameterуказывает, что опции, задаваемые этим дополнением, всегда должны иметь аргумент опции, т. е. не могут следовать за другой опцией. -
-xили--exclusiveподразумевает и-r, и-f. -
-w WRAPPED_COMMANDили--wraps=WRAPPED_COMMANDзаставляет указанную команду наследовать дополнения от обернутой команды (см. подробности ниже). -
-nили--conditionзадаёт командный интерпретатор, который должен вернуть 0, если дополнение должно быть использовано. Это позволяет задавать дополнения, которые должны использоваться только в некоторых случаях. -
-CSTRINGили--do-complete=STRINGзаставляет complete пытаться найти все возможные дополнения для указанной строки. -
-Cили--do-completeбез аргумента заставляет complete пытаться найти все возможные дополнения для текущего буфера командной строки. Если оболочка не в интерактивном режиме, возвращается ошибка. -
-Aи--authoritativeбольше ничего не делают и игнорируются. -
-uи--unauthoritativeбольше ничего не делают и игнорируются.
Специфические для команды дополнения с табуляцией в fish основаны на понятии опций и аргументов. Опция — это параметр, начинающийся с дефиса, например, '-h', '-help' или '--help'. Аргументы — это параметры, не начинающиеся с дефиса. Fish распознаёт три стиля опций, такие же, как и в библиотеке getopt GNU. Эти стили:
- Короткие опции, такие как '
-a'. Короткие опции имеют длину один символ, предваряются одним дефисом и могут быть объединены (например, '-la', что эквивалентно '-l -a'). Аргументы опции могут быть указаны в следующем параметре ('-w 32') или путём добавления значения к опции ('-w32'). - Опции старого стиля, такие как '
-Wall'. Опции старого стиля могут быть длиннее одного символа, предваряются одним дефисом и не могут быть объединены. Аргументы опции указываются в следующем параметре ('-ao null'). - Опции в стиле GNU, такие как '
--colors'. Опции в стиле GNU могут быть длиннее одного символа, предваряются двумя дефисами, и не могут быть объединены. Аргументы опций могут быть указаны в следующем параметре ('--quoting-style shell') или путём добавления к опции '=' и значения ('--quoting-style=shell'). Опции в стиле GNU могут быть сокращены, если сокращение уникально ('--h' эквивалентно '--help', если help — единственная опция, начинающаяся с 'h').
Опции для указания имени команды и пути к команде могут использоваться несколько раз для определения одних и тех же дополнений для нескольких команд.
Опции для указания переключателей команды и обернутых команд могут использоваться несколько раз для определения нескольких дополнений для команды(ей) в одном вызове.
Вызов complete несколько раз для одной и той же команды добавляет новые определения поверх любых существующих дополнений, определённых для команды.
Когда -a или --arguments используются совместно с опциями длинного, короткого или старого стиля, указанные аргументы используются только как дополнения при попытке дополнить аргумент любой из указанных опций. Если -a или --arguments используются без каких-либо опций длинного, короткого или старого стиля, указанные аргументы используются при дополнении любого аргумента команды (кроме дополнения аргумента опции, который был задан с -r или --require-parameter).
Подстановки команд, найденные в OPTION_ARGUMENTS, не должны возвращать список аргументов, разделённый пробелами. Вместо этого они должны возвращать список аргументов, разделённый символами новой строки, и каждый аргумент может необязательно содержать символ табуляции, за которым следует описание аргумента. Любое описание, предоставленное таким образом, переопределяет описание, заданное с -d или --description.
Опции -w или --wraps заставляют указанную команду наследовать дополнения от другой команды. Говорят, что наследующая команда "обертывает" унаследованную команду. У обернутой команды могут быть свои дополнения помимо унаследованных. Команда может обернуть несколько команд, и обертывание является транзитивным: если A обертывает B, а B обертывает C, то A автоматически наследует все дополнения C. Обертывание можно снять, используя опции -e или --erase. Обратите внимание, что обертывание работает только для дополнений, заданных с -c или --command, и игнорируется при задании дополнений с -p или --path.
При удалении завершений, можно удалить все завершения для определённой команды, указав complete -c COMMAND -e, или указать конкретный вариант завершения для удаления, указав вариант в длинной, короткой или старой форме.
Пример
Вариант короткой формы -o для команды gcc требует, чтобы за ней следовал файл. Это можно сделать, написав:
complete -c gcc -s o -r
Вариант короткой формы -d для команды grep требует, чтобы использовалась одна из строк 'read', 'skip' или 'recurse'. Это можно указать, написав:
complete -c grep -s d -x -a "read skip recurse"
Команда su принимает в качестве аргумента любое имя пользователя. Имена пользователей задаются как первое поле, разделённое двоеточием, в файле /etc/passwd. Это можно указать так:
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
Команда rpm имеет несколько различных режимов. Если указан флаг -e или --erase, rpm должна удалить один или несколько пакетов, в этом случае допустимы несколько переключателей, связанных с удалением пакетов, таких как переключатель nodeps.
Это можно записать как:
complete -c rpm -n "__fish_contains_opt -s e erase" -d nodeps "Don't check dependencies"
где __fish_contains_opt — функция, которая проверяет буфер командной строки на наличие заданного набора опций.
Для реализации псевдонима используйте опцию -w или --wraps.
complete -c hub -w git
Теперь hub наследует все завершения из git. Обратите внимание, что это также можно указать в объявлении функции.
Вернуться к списку команд.
contains - проверка наличия слова в списке
Синтаксис
contains [OPTIONS] KEY [VALUES...]
Описание
contains проверяет, содержит ли набор VALUES строку KEY. Если да, contains завершается с кодом 0; если нет, то с кодом 1.
Доступны следующие опции:
-
-iили--indexвывод индекса слова
Обратите внимание, что, как и GNU-утилиты, 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, Включить интерпретацию обратных слешей
Последовательности эскейпов
Если используется -e, распознаются следующие последовательности:
-
\обратный слэш -
\aсигнал (BEL) -
\bвозврат на одну позицию назад -
\cне выводить дальнейший вывод -
\eэскейп -
\fперевод страницы -
\nновая строка -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\0NNNбайт с восьмеричным значением NNN (1-3 цифры) -
\xHHбайт с шестнадцатеричным значением HH (1-2 цифры)
Пример
echo 'Hello World'
Вывод hello world в стандартный вывод
echo -e 'Top\nBottom'
Вывод Top и Bottom на отдельных строках, используя последовательность эскейпов
Вернуться к списку команд.
else - выполнение команды, если условие не выполнено
Синтаксис
if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end
Описание
if выполнит команду CONDITION. Если код выхода условия равен 0, будут выполнены команды COMMANDS_TRUE. Если он не равен 0 и указан else, будет выполнена COMMANDS_FALSE.
Пример
Следующий код проверяет, является ли файл foo.txt обычным файлом.
if test -f foo.txt
echo foo.txt exists
else
echo foo.txt does not exist
end
Вернуться к списку команд.
emit - Выпуск общего события
Синтаксис
emit EVENT_NAME [ARGUMENTS...]
Описание
emit выпускает или генерирует событие. События передаются или ловятся специальными функциями, называемыми обработчиками событий. Аргументы передаются обработчикам событий в качестве аргументов функций.
Пример
Следующий код сначала определяет обработчик события для общего события с именем 'test_event', а затем выпускает событие этого типа.
function event_test --on-event test_event
echo event test: $argv
end
emit test_event something
Вернуться к списку команд.
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 возвращает указанное задание в фокус, возобновляя его, если оно приостановлено. Во время выполнения фонового задания оболочка приостанавливается. Если задание не указано, последнее используемое задание выводится на передний план. Если указан PID, задание с указанным идентификатором группы выводится на передний план.
Идентификатор процесса желаемого процесса обычно находится с помощью расширения процесса. Fish способен расширять гораздо больше, чем просто числовой PID, включая ссылки на себя и поиск PID по имени.
Пример
fg %1 выведет задание с ID 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. Чтобы всегда начинать в режиме 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и определяет локальную переменную с тем же именем и значением при определении функции. Это похоже на замыкание в других языках, таких как Python, но немного отличается. Обратите внимание на слово «снимок» в первом предложении. Если вы измените значение переменной после определения функции, даже если вы сделаете это в том же объеме (обычно в другой функции), новое значение не будет использоваться функцией, которую вы только что создали с помощью этого параметра. См. примерfunction notifyниже, чтобы понять, как это может быть использовано.
Если пользователь вводит дополнительные аргументы после функции, они вставляются в массив переменных переменной массива $argv. Если указан параметр --argument-names, аргументы также присваиваются именам, указанным в этом параметре.
Используя один из переключателей обработчиков событий, функцию можно запустить автоматически в определенные моменты. Пользователь может создавать новые события с помощью встроенной команды emit. Fish генерирует следующие именованные события:
-
fish_prompt, которое возникает всякий раз, когда отображается новое приглашение fish. -
fish_command_not_found, которое возникает всякий раз, когда поиск команды не удался. -
fish_preexec, которое возникает непосредственно перед выполнением интерактивной команды. Команда передаётся как первый параметр.Примечание: это событие будет вызываться даже если команда недопустима. Параметр commandline содержит всю команду дословно и может потенциально содержать новые строки.
-
fish_postexec, которое возникает сразу после выполнения интерактивной команды. Команда передаётся как первый параметр.Примечание: это событие будет вызываться даже если команда недопустима. Параметр commandline содержит всю команду дословно и может потенциально содержать новые строки.
Пример
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 найдёт подходящий браузер.
Если вы хотите использовать другой браузер (кроме описанного выше) для справки fish, вы можете установить переменную fish_help_browser. Эта переменная может быть установлена в виде массива, где первый элемент — команда браузера, а остальные — параметры браузера.
Обратите внимание, что большинство встроенных команд отображают справку в терминале при использовании параметра --help.
Пример
help fg отображает документацию для встроенной команды fg.
Назад к списку команд.
history - отображение и управление историей команд
Синтаксис
history search [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] [ --max=n ] [ --null ] [ "search string"... ] history delete [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] "search string"... history merge history save history clear history ( -h | --help )
Описание
history используется для поиска, удаления и других манипуляций с историей интерактивных команд.
Доступны следующие операции (подкоманды):
-
searchвозвращает элементы истории, соответствующие строке поиска. Если строка поиска не указана, возвращаются все элементы истории. Это действие по умолчанию, если не указана другая операция. Вы должны явно указатьhistory search, если хотите выполнить поиск по подкомандам. Параметр поиска--containsбудет использован, если вы не укажете другой параметр поиска. Элементы упорядочены по убыванию времени. Если стандартный вывод подключён к терминалу, вывод будет направлен через ваш просмотрщик страниц функцией 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.
Примечания
Если вы укажете и --prefix, и --contains, будет использоваться последний увиденный флаг.
Обратите внимание, что для обратной совместимости каждый подкоманда также может быть указан как длинный параметр. Например, вместо history search можно ввести history --search. Эти длинные параметры устарели и будут удалены в будущей версии.
Назад к списку команд.
if - условное выполнение команды
Синтаксис
if CONDITION; COMMANDS_TRUE...; [else if CONDITION2; COMMANDS_TRUE2...;] [else; COMMANDS_FALSE...;] end
Описание
if выполнит команду CONDITION. Если код состояния условия равен 0, будут выполнены команды COMMANDS_TRUE. Если код состояния не равен 0, и указан else, будет выполнена COMMANDS_FALSE.
В условии можно использовать and или or. Смотрите второй пример ниже.
Код состояния последней завершившейся фоновой команды всегда можно получить с помощью переменной $status.
Пример
Следующий код выведет foo.txt exists, если файл foo.txt существует и является обычным файлом, в противном случае выведет bar.txt exists, если файл bar.txt существует и является обычным файлом, в противном случае выведет foo.txt and bar.txt do not exist.
if test -f foo.txt
echo foo.txt exists
else if test -f bar.txt
echo bar.txt exists
else
echo foo.txt and bar.txt do not exist
end
Следующий код выведет "foo.txt существует и доступен для чтения", если foo.txt является обычным файлом и доступен для чтения.
if test -f foo.txt and test -r foo.txt echo "foo.txt exists and is readable" end
Назад к списку команд.
isatty - проверить, является ли дескриптор файла терминалом.
Синтаксис
isatty [FILE DESCRIPTOR]
Описание
isatty проверяет, является ли дескриптор файла терминалом.
FILE DESCRIPTOR может быть либо номером дескриптора файла, либо одной из строк stdin, stdout, или stderr.
Если указанный дескриптор файла является терминалом, код выхода команды равен нулю. В противном случае код выхода не равен нулю. Сообщения в стандартную ошибку не выводятся.
Примеры
Из интерактивной оболочки команды ниже завершаются с возвращаемым значением ноль:
isatty isatty stdout isatty 2 echo | isatty 1
А эти завершатся с ненулевым значением:
echo | isatty isatty 9 isatty stdout > file isatty 2 2> file
Назад к списку команд.
jobs - вывод текущих выполняемых задач
Синтаксис
jobs [OPTIONS] [PID]
Описание
jobs выводит список текущих задач и их статус.
jobs принимает следующие переключатели:
-
-cили--commandвыводит имя команды для каждого процесса в задачах. -
-gили--groupвыводит только идентификатор группы каждой задачи. -
-lили--lastвыводит только последнюю запущенную задачу. -
-pили--pidвыводит идентификатор процесса для каждого процесса во всех задачах.
В системах, поддерживающих эту функцию, jobs выведет использование ЦП каждой задачи с момента выполнения последней команды. Использование ЦП выражается в процентах от полной активности ЦП. Обратите внимание, что в многопроцессорных системах общее использование может быть больше 100%.
Пример
jobs выводит сводку текущих задач.
Назад к списку команд.
math - Выполнение математических вычислений
Синтаксис
math [-sN] EXPRESSION
Описание
math используется для выполнения математических вычислений. Это очень тонкий обертка для программы bc, что позволяет указать выражение из командной строки без использования нестандартных расширений или конвейера.
Описание синтаксиса, поддерживаемого math, см. в руководстве по программе bc. Имейте в виду, что параметрическая обработка выполняется для всех выражений перед их вычислением. Это может быть очень полезно для выполнения вычислений, включающих переменные оболочки или выход команды подстановки, но также означает, что скобки должны быть экранированы.
Доступны следующие параметры:
-
-sNУстанавливает масштаб результата.Nдолжно быть целым числом и по умолчанию равно нулю. Это просто устанавливает переменную bcscaleдля предоставленного значения. Обратите внимание, что вы не можете вставить пробел между-sиN.
Возвращаемые значения
Если указаны некорректные параметры или выражение отсутствует, возвращаемое значение status равно двум. Если выражение некорректно, возвращаемое значение status равно трём. Если bc возвращает результат 0 (буквально, а не 0.0 или аналогичные варианты), возвращаемое значение status равно единице, в противном случае - нулю.
Примеры
math 1+1 выводит 2.
math $status-128 выводит числовой код выхода последней команды минус 128.
math 10 / 6 выводит 1.
math -s0 10.0 / 6.0 выводит 1.
math -s3 10 / 6 выводит 1.666.
Предостережения
Обратите внимание, что оператор 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.
Обратите внимание, что эта функция не будет использоваться, если команда с таким именем существует (что имеет место в macOS или Haiku).
Пример
open *.txt открывает все текстовые файлы в текущей директории в вашем текстовом редакторе по умолчанию.
Назад к списку команд.
or - условное выполнение команды
Синтаксис
COMMAND1; or COMMAND2
Описание
or используется для выполнения команды, если текущий код выхода (установленный предыдущей командой) не равен 0.
Инструкции or могут использоваться как часть условия в блоке and или while. См. документацию для if и while для примеров.
or не изменяет текущий код выхода. Код выхода последней завершившейся фоновой команды всегда доступен через переменную $status.
Пример
Следующий код запускает команду make для сборки программы. Если сборка прошла успешно, программа устанавливается. Если любой из этапов завершается неудачей, выполняется make clean, удаляющий файлы, созданные процессом сборки.
make; and make install; or make clean
Назад к списку команд.
popd - Перемещение по стеку каталогов
Синтаксис
popd
Описание
popd удаляет верхний каталог из стека каталогов и изменяет текущий каталог на новый верхний каталог. Используйте pushd для добавления каталогов в стек.
Пример
pushd /usr/src # Working directory is now /usr/src # Directory stack contains /usr/src pushd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src /usr/src/fish-shell popd # Working directory is now /usr/src # Directory stack contains /usr/src
Назад к списку команд.
prevd - Переход назад по истории каталогов
Сводка
prevd [ -l | --list ] [POS]
Описание
prevd перемещает назад POS позиции в истории посещённых каталогов; если достигнут начала истории, выводится предупреждение.
Если установлен флаг -l или --list, текущая история также отображается.
Обратите внимание, что команда cd ограничивает историю каталогов 25 самыми недавно посещёнными каталогами. История хранится в переменных $dirprev и $dirnext, которые эта команда обрабатывает.
Пример
cd /usr/src # Working directory is now /usr/src cd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell prevd # Working directory is now /usr/src nextd # Working directory is now /usr/src/fish-shell
Назад к списку команд.
printf - вывод текста в соответствии со строкой формата
Сводка
printf format [argument...]
Описание
printf форматирует строку FORMAT с аргументом ARGUMENT и отображает результат.
Строка FORMAT должна содержать спецификаторы формата, каждый из которых заменяется последующими аргументами в соответствии со спецификатором. Спецификаторы подробно описаны ниже и взяты из функции C-библиотеки printf(3).
В отличие от echo, printf не добавляет новую строку, если она не указана как часть строки.
Допустимые спецификаторы формата:
-
%d: Аргумент будет использоваться как десятичное целое число (со знаком или без знака) -
%i: Аргумент будет использоваться как целое число со знаком -
%o: Восьмеричное беззнаковое целое число -
%u: Десятичное беззнаковое целое число -
%xили%X: Шестнадцатеричное беззнаковое целое число -
%f,%gили%G: Вещественное число с плавающей точкой -
%eили%E: Вещественное число с плавающей точкой в научной (XXXeYY) записи -
%s: Строка -
%b: Как строка, интерпретирующая обратные слеши, за исключением того, что восьмеричные escape-последовательности имеют вид \0 или \0ooo.
%% обозначает буквенный символ "%".
Обратите внимание, что преобразование может завершиться неудачно, например, "102.234" не будет без потерь преобразовано в целое число, что заставит printf вывести сообщение об ошибке.
printf также знает ряд обратных слешей:
-
\"двойная кавычка -
\\обратный слэш -
\aсигнал (звонок) -
\bвозврат на одну позицию влево -
\cне генерировать дальнейший вывод -
\eescape-последовательность -
\fподача формы -
\nновая строка -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\oooвосьмеричное число (ooo — от 1 до 3 цифр) -
\xhhшестнадцатеричное число (hhh — от 1 до 2 цифр) -
\uhhhh16-битный символ Unicode (hhhh — 4 цифры) -
\Uhhhhhhhh32-битный символ Unicode (hhhhhhhh — 8 цифр)
Аргумент format повторно используется столько раз, сколько необходимо для преобразования всех заданных аргументов. Если спецификатор формата не подходит для данного аргумента, выводится сообщение об ошибке. Например, `printf 'd' "102.234"` выводит сообщение об ошибке, так как "102.234" не может быть отформатирован как целое число.
Этот файл импортирован из printf в GNU Coreutils версии 6.9. Если вы хотите использовать более новую версию printf, например, ту, что поставляется с вашей ОС, попробуйте command printf.
Пример
printf '%s\t%s\n' flounder fish
Выведет "flounder fish" (разделенные символом табуляции), за которым следует символ новой строки. Это полезно для записи завершений, так как fish ожидает, что скрипты завершения выведут опцию, за которой следует описание, разделенные символом табуляции.
printf '%s:%d' "Number of bananas in my pocket" 42
Выведет "Количество бананов в моём кармане: 42", без новой строки.
Назад к списку команд.
prompt_pwd - вывод pwd, подходящего для подсказки
Сводка
prompt_pwd
Описание
prompt_pwd — это функция для вывода текущего каталога в формате, подходящем для подсказок. Она заменит домашний каталог на "~" и сократит каждый компонент пути, кроме последнего, до значения по умолчанию в один символ.
Для изменения количества символов на каждый компонент пути установите $fish_prompt_pwd_dir_length на требуемое количество символов. Установка значения 0 или недопустимого значения полностью отключит сокращение.
Примеры
> cd ~/ > echo $PWD /home/alfa > prompt_pwd ~ > cd /tmp/banana/sausage/with/mustard > prompt_pwd /t/b/s/w/mustard > set -g fish_prompt_pwd_dir_length 3 > prompt_pwd /tmp/ban/sau/wit/mustard
Назад к списку команд.
psub - выполнение подстановки процесса
Сводка
COMMAND1 ( COMMAND2 | psub [-f] [-s SUFFIX])
Описание
Оболочки Posix имеют синтаксис, который является смесью подстановки команд и конвейеров, называемой подстановкой процесса. Она используется для передачи вывода команды в вызывающую команду, подобно подстановке команды, но с тем отличием, что вывод не передаётся через аргументы командной строки, а через именованную трубу, а имя именованной трубы передаётся как аргумент вызывающей программе. psub в сочетании с обычной подстановкой команды обеспечивает ту же функциональность.
Если для psub задан переключатель -f или --file, psub будет использовать обычный файл вместо именованной трубы для связи с вызывающим процессом. Это сделает psub значительно медленнее при больших объёмах данных, но имеет преимущество, что процесс чтения может осуществлять поиск в потоке.
Если задан переключатель -s или ---suffix, psub добавит SUFFIX к имени файла.
Пример
diff (sort a.txt | psub) (sort b.txt | psub) # shows the difference between the sorted versions of files `a.txt` and `b.txt`. source-highlight -f esc (cpp main.c | psub -s .c) # highlights `main.c` after preprocessing as a C source.
Назад к списку команд.
pushd - добавление каталога в стек каталогов
Сводка
pushd [DIRECTORY]
Описание
Функция pushd добавляет DIRECTORY в верхнюю часть стека каталогов и делает его текущим рабочим каталогом. popd извлечёт его и вернётся в исходный каталог.
Без аргументов она меняет верхние два каталога в стеке.
pushd +NUMBER вращает стек против часовой стрелки (с нижнего на верхний).
pushd -NUMBER вращает по часовой стрелке (с верхнего на нижний).
См. также dirs и dirs -c.
Пример
pushd /usr/src # Working directory is now /usr/src # Directory stack contains /usr/src pushd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src /usr/src/fish-shell pushd /tmp/ # Working directory is now /tmp # Directory stack contains /tmp /usr/src /usr/src/fish-shell pushd +1 # Working directory is now /usr/src # Directory stack contains /usr/src /usr/src/fish-shell /tmp popd # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src/fish-shell /tmp
Назад к списку команд.
pwd - вывод текущего рабочего каталога
Сводка
pwd
Описание
pwd выводит (печатает) текущий рабочий каталог.
Обратите внимание, что fish всегда разрешает символические ссылки в пути текущего каталога.
Назад к списку команд.
random - генерировать случайное число
Сводка
random random SEED random START END random START STEP END random choice [ITEMS...]
Описание
RANDOM генерирует псевдослучайное целое число из равномерного распределения. Диапазон (включительно) зависит от переданных аргументов. Без аргументов указывается диапазон [0; 32767]. При указании одного аргумента внутренний генератор будет инициализирован аргументом для будущих вызовов RANDOM, и никакого вывода не будет произведено. Два аргумента указывают диапазон [START; END]. Три аргумента указывают диапазон [START; END] с шагом STEP между возможными результатами. RANDOM choice выберет один случайный элемент из последующих аргументов.
Обратите внимание, что инициализация генератора НЕ обеспечит одинаковый результат на разных системах.
Не рассматривайте RANDOM как криптографически безопасный или даже статистически точный.
Пример
Следующий код будет считать вниз от случайного чётного числа от 10 до 20 до 1:
for i in (seq (random 10 2 20) -1 1)
echo $i
end
И это откроет случайную картинку из любого из подкаталогов:
open (random choice **jpg)
Назад к списку команд.
read - чтение строки ввода в переменные
Сводка
read [OPTIONS] [VARIABLES...]
Описание
read считывает одну строку из стандартного ввода и сохраняет результат в одной или нескольких переменных оболочки.
Доступны следующие опции:
-
-c CMDили--command=CMDустанавливает начальную строку в буфере команды в интерактивном режиме наCMD. -
-gили--globalделает переменные глобальными. -
-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 для получения дополнительной информации о правилах области видимости переменных.
Когда read достигает конца файла (EOF) вместо разделителя, она возвращает 1. В противном случае возвращает 0.
Пример
Следующий код сохранит значение 'hello' в переменной оболочки $foo.
echo hello|read foo
# This is a neat way to handle command output by-line:
printf '%s\n' line1 line2 line3 line4 | while read -l foo
echo "This is another line: $foo"
end
Назад к списку команд.
realpath - Преобразование пути к абсолютному пути без символических ссылок
Синопсис
realpath path
Описание
Это реализовано как функция и встроенная команда. Функция попытается использовать внешнюю команду realpath, если она найдена. В противном случае используется встроенная команда. Встроенная команда не поддерживает опции. Она предназначена для использования только сценариями, которые должны быть портативными. Реализация встроенной команды ведет себя как GNU realpath, когда вызывается без опций (что является наиболее распространенным случаем). В общем, скрипты не должны вызывать встроенную команду напрямую. Они должны использовать realpath.
Если путь некорректен, переведённый путь не будет выведен в стандартный вывод, и будет сообщено об ошибке.
Назад к списку команд.
return - остановить текущую внутреннюю функцию
Синопсис
function NAME; [COMMANDS...;] return [STATUS]; [COMMANDS...;] end
Описание
return останавливает выполняющуюся функцию. Код выхода устанавливается в STATUS в случае его указания.
Обычно добавляется внутри условного блока, такого как оператор if или switch, для условной остановки выполняющейся функции и возврата к вызывающей функции, но также может использоваться для указания кода выхода функции.
Пример
Следующий код является реализацией команды false как функции fish
function false
return 1
end
Назад к списку команд.
set - отображение и изменение переменных оболочки.
Синопсис
set [SCOPE_OPTIONS] set [OPTIONS] VARIABLE_NAME VALUES... set [OPTIONS] VARIABLE_NAME[INDICES]... VALUES... set ( -q | --query ) [SCOPE_OPTIONS] VARIABLE_NAMES... set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME[INDICES]...
Описание
set манипулирует переменными оболочки.
Если set вызывается без аргументов, имена и значения всех переменных оболочки выводятся. Если заданы флаги области действия или экспорта, выводятся только переменные, соответствующие указанной области действия.
При предоставлении как имён переменных, так и их значений, set присваивает переменной VARIABLE_NAME значения VALUES....
Следующие опции управляют областью действия переменных:
-
-lили--localзаставляет указанную переменную оболочки иметь область действия, локальную для текущего блока, даже если переменная с данным именем существует и является нелокальной -
-gили--globalприсваивает указанной переменной оболочки глобальную область действия. Неглобальные переменные исчезают при завершении блока, к которому они относятся -
-Uили--universalприсваивает указанной переменной оболочки универсальную область действия. Если эта опция указана, переменная будет общим ресурсом для всех текущих экземпляров fish на данном компьютере и сохранится после перезагрузки оболочки. -
-xили--exportделает указанную переменную оболочки доступной дочерним процессам (делая её «переменной среды») -
-uили--unexportне делает указанную переменную оболочки доступной дочерним процессам
Следующие опции доступны:
-
-eили--eraseудаляет указанную переменную оболочки -
-qили--queryпроверяет, определены ли указанные имена переменных. Ничего не выводит, но код выхода встроенной команды – количество переменных, которые не были определены. -
-nили--namesВыводит только имена всех определённых переменных, а не их значения -
-Lили--longне сокращает длинные значения при выводе переменных set
Если переменная установлена в несколько значений, она будет массивом с указанными элементами. Если переменная установлена в ноль элементов, она станет массивом с нулём элементов.
Если имя переменной состоит из одного или нескольких элементов массива, таких как PATH[1 3 7], изменяются только указанные элементы массива. При указании индексов массива для set, можно использовать несколько аргументов для указания дополнительных индексов, например, set PATH[1] PATH[4] /bin /sbin. Если вы указываете отрицательный индекс при расширении или присвоении массиву переменной, индекс будет вычисляться от конца массива. Например, индекс -1 означает последний индекс массива.
Правила области действия при создании или обновлении переменной:
- Если переменная явно установлена как универсальная, глобальная или локальная, это значение будет применено. Если переменная с тем же именем существует в другой области действия, эта переменная не будет изменена.
- Если переменная не установлена явно как универсальная, глобальная или локальная, но ранее была определена, используется предыдущая область действия переменной.
- Если переменная не установлена явно как универсальная, глобальная или локальная и никогда ранее не была определена, она будет локальной для выполняемой функции. Обратите внимание, что это отличается от использования флагов
-lили--local. Если один из этих флагов используется, переменная будет локальной для самого внутреннего текущего выполняемого блока, в то время как без них переменная будет локальной для функции. Если никакая функция не выполняется, переменная будет глобальной.
Правила экспорта при создании или обновлении переменной идентичны правилам области действия для переменных:
- Если переменная явно установлена как экспортируемая или не экспортируемая, это значение будет применено.
- Если переменная не установлена явно как экспортируемая или не экспортируемая, но ранее была определена, сохраняется предыдущее правило экспорта для переменной.
- Если переменная не установлена явно как экспортируемая или не экспортируемая и никогда ранее не была определена, она не будет экспортироваться.
В режиме запроса можно указать область действия для проверки.
В режиме удаления, если указаны индексы переменных, будут удалены только указанные фрагменты массива переменной.
set требует, чтобы все опции предшествовали любым другим аргументам. Например, set flags -l будет иметь эффект установки значения переменной flags в '-l', не делая переменную локальной.
В режиме присвоения set завершается с ненулевым кодом выхода, если присвоения переменных не удалось выполнить успешно. Если присвоения переменных были выполнены, код выхода остаётся прежним. Это позволяет одновременно захватить вывод и код выхода подкоманды, например if set output (command). В режиме запроса код выхода — это количество переменных, которые не были найдены. В режиме удаления set завершается с нулевым кодом выхода в случае успеха, с ненулевым кодом выхода, если командная строка некорректна, если переменная защищена от записи или если переменная не существовала.
Пример
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устанавливает режим полужирного шрифта. -
-d,--dimустанавливает режим тусклого шрифта. -
-i,--italicsустанавливает режим курсива. -
-r,--reverseустанавливает режим обратного видео. -
-u,--underlineустанавливает режим подчеркивания.
Использование ключевого слова normal сбросит цвет фона, цвета текста и все форматирования до значений по умолчанию.
Примечания
- Использование ключевого слова normal сбросит и цвет фона, и цвет текста до значений по умолчанию для терминала.
- Установка цвета фона влияет только на последующие символы. Fish не предоставляет способ установки цвета фона для всего окна терминала. Настройка цвета фона окна (и других атрибутов, таких как его непрозрачность) должна выполняться с помощью механизмов, которые предоставляет терминал.
- Некоторые терминалы используют последовательность escape
--boldдля переключения на набор более ярких цветов, а не для увеличения веса текста. -
set_colorработает путём вывода последовательностей символов в stdout. Если используется в подстановке команд или в конвейере, эти символы также будут захвачены. Это может быть или не быть желательным. Проверка кода выходаisatty stdoutперед использованиемset_colorможет быть полезной, чтобы решить не применять форматирование цвета в скрипте.
Примеры
set_color red; echo "Roses are red" set_color blue; echo "Violets are blue" set_color 62A; echo "Eggplants are dark purple" set_color normal; echo "Normal is nice" ## Resets the background too
Обнаружение возможностей терминала
Fish использует эвристику, чтобы определить, поддерживает ли терминал палитру из 256 цветов, по сравнению с более ограниченной палитрой из 16 цветов устаревших терминалов. Поддержка может быть принудительно включена путём установки fish_term256 в 1. Если $TERM содержит «256color» (например, xterm-256color), поддержка 256 цветов включена. Если $TERM содержит xterm, поддержка 256 цветов включена (кроме MacOS: $TERM_PROGRAM и $TERM_PROGRAM_VERSION используются для обнаружения Terminal.app на macOS 10.6; поддержка здесь отключена, потому что известно, что он сообщает xterm и поддерживает только 16 цветов).
Если terminfo сообщает о поддержке 256 цветов для терминала, поддержка всегда включена. Для отладки проблем с палитрой цветов tput colors может быть полезен для просмотра количества цветов в terminfo для терминала. Fish, запущенный как fish -d2, будет включать диагностические сообщения, которые указывают используемый режим поддержки цвета.
Многие терминалы поддерживают 24-битные (т. е., истинные цвета) цветовые escape-последовательности. Это включает современные xterm, Gnome Terminal, Konsole и iTerm2. Fish пытается обнаружить такие терминалы различными способами в config.fish Вы можете явно включить эту поддержку с помощью set fish_term24bit 1.
Команда set_color использует базу данных terminfo, чтобы найти способ изменения цвета терминала на любом используемом терминале. Некоторые системы имеют старые и неполные базы данных terminfo и могут отсутствовать цветовая информация для терминалов, которые её поддерживают. Fish предположит, что все терминалы могут использовать escape-последовательности ANSI X3.64, если определение в terminfo указывает, что цвет ниже 16 не поддерживается.
Поддержка курсива, затемнения, инверсии и других режимов не гарантируется во всех эмуляторах терминалов. Fish пытается определить, поддерживает ли терминал эти режимы, даже если база данных terminfo может быть не обновлена.
Назад к списку команд.
source - выполнить содержимое файла.
Синтаксис
source FILENAME [ARGUMENTS...]
Описание
source выполняет команды из указанного файла в текущей оболочке. Это отличается от запуска нового процесса для выполнения команд (т. е. fish < FILENAME), поскольку команды будут выполняться текущей оболочкой, а значит изменения переменных оболочки повлияют на текущую оболочку. Если после имени файла указаны дополнительные аргументы, они будут добавлены в переменную $argv. Переменная $argv не будет содержать имя исходного файла.
Если файл не указан или используется имя файла '-', будет считано стандартное ввод.
Код возврата source — это код возврата последней задачи для выполнения. Если при открытии или чтении файла возникнет ошибка, source завершит работу с ненулевым кодом.
. (одна точка) — это псевдоним для команды source. Использование . устарело в пользу source, а . будет удалено в будущей версии fish.
Пример
source ~/.config/fish/config.fish # Causes fish to re-read its initialization file.
Ограничения
В версиях fish до 2.3.0 переменная $argv содержала бы один элемент (имя исходного файла), если аргументы отсутствуют. В противном случае она содержала бы аргументы без имени исходного файла. Это поведение было очень запутанным и отличалось от других оболочек, таких как bash и zsh.
Назад к списку команд.
status - запрос информации о работе fish
Синтаксис
status status is-login status is-interactive status is-block status is-command-substitution status is-no-job-control status is-full-job-control status is-interactive-job-control status current-filename status current-line-number status print-stack-trace status job-control CONTROL-TYPE
Описание
Без аргументов, status отображает сводку текущего состояния входа в систему и управления задачами оболочки.
Доступны следующие операции (подкоманды):
-
is-command-subвозвращает 0, если fish в настоящее время выполняет подстановку команды. Также-cили--is-command-substitution. -
is-blockвозвращает 0, если fish в настоящее время выполняет блок кода. Также-bили--is-block. -
is-interactiveвозвращает 0, если fish интерактивен — то есть подключен к клавиатуре. Также-iили--is-interactive. -
is-loginвозвращает 0, если fish — оболочка входа в систему — то есть если fish должен выполнить задачи входа в систему, такие как настройка PATH. Также-lили--is-login. -
is-full-job-controlвозвращает 0, если включено полное управление задачами. Также--is-full-job-control(без короткого флага). -
is-interactive-job-controlвозвращает 0, если включено интерактивное управление задачами. Также--is-interactive-job-control(без короткого флага). -
is-no-job-controlвозвращает 0, если управление задачами отключено. Также--is-no-job-control(без короткого флага). -
current-filenameвыводит имя файла текущего выполняемого скрипта. Также-fили--current-filename. -
current-line-numberвыводит номер строки текущего выполняемого скрипта. Также-nили--current-line-number. -
job-control CONTROL-TYPEустанавливает тип управления задачами, который может бытьnone,full, илиinteractive. Также-j CONTROL-TYPEили--job-control=CONTROL-TYPE. -
print-stack-traceвыводит стек вызовов всех функций в стеке вызовов. Также-tили--print-stack-trace.
Примечания
Для обратной совместимости каждая подкоманда также может быть указана как длинный или короткий вариант. Например, вместо status is-login можно ввести status --is-login. Формы флагов устарели и могут быть удалены в будущих выпусках (но не раньше fish 3.0).
Можно указать только одну подкоманду за вызов, даже если используется форма флага подкоманды.
Назад к списку команд.
string - работа со строками
Синтаксис
string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
[STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
[STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
[(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-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 выполняет операции со строками.
Аргументы STRING берутся из командной строки, если стандартный ввод подключен к конвейеру или файлу, в противном случае они читаются со стандартного ввода, по одной строке STRING на строку. Недопустимо подавать аргументы STRING в командной строке и со стандартного ввода.
Аргументы, начинающиеся с - обычно интерпретируются как переключатели; -- заставляет последующие аргументы не обрабатываться как переключатели, даже если они начинаются с -. Переключатели и требуемые аргументы распознаются только в командной строке.
Большинство подкоманд принимают переключатели -q или --quiet, которые подавляют обычный вывод, но завершаются с документированным кодом состояния.
В дополнение к кодам возврата, документированным ниже, все подкоманды строк завершаются значением 2, чтобы указать, что произошла ошибка.
Доступны следующие подкоманды:
-
lengthсообщает длину каждого аргумента строки в символах. Код состояния: 0, если предоставлен хотя бы один непустой STRING, или 1 в противном случае. -
subпечатает подстроку каждого аргумента строки. Начало подстроки можно указать с помощью-sили--start, за которым следует значение индекса, начинающегося с 1. Положительные значения индекса относятся к началу строки, а отрицательные — к концу строки. Значение по умолчанию — 1. Длину подстроки можно указать с помощью-lили--length. Если длина не указана, подстрока продолжается до конца каждой строки STRING. Код состояния: 0, если выполнена хотя бы одна операция над подстрокой, 1 в противном случае. -
splitразбивает каждую строку STRING по разделителю SEP, который может быть пустой строкой. Если-mили--maxуказаны, выполняется не более MAX разделений для каждой строки STRING. Если-rили--rightуказаны, разделение выполняется справа налево. Это полезно в сочетании с-mили--max. Код состояния: 0, если выполнено хотя бы одно разделение, или 1 в противном случае. -
joinобъединяет аргументы STRING в одну строку, разделенную SEP, которая может быть пустой строкой. Код состояния: 0, если выполнено хотя бы одно объединение, или 1 в противном случае. -
trimудаляет ведущие и хвостовые пробелы из каждой строки STRING. Если-lили--leftуказаны, удаляются только ведущие пробелы. Если-rили--rightуказаны, удаляются только хвостовые пробелы. Переключатели-cили--charsзаставляют удалять символы в CHARS вместо пробелов. Код состояния: 0, если удален хотя бы один символ, или 1 в противном случае. -
escapeэскейпит каждую строку STRING, чтобы её можно было передать обратноeval, чтобы получить исходный аргумент. По умолчанию все специальные символы эскейпятся, а кавычки используются для упрощения вывода, когда это возможно. Если-nили--no-quotedуказаны, упрощенная форма с кавычками не используется. Код состояния: 0, если была выполнена хотя бы одна экранировка строки, или 1 в противном случае. -
matchпроверяет каждую строку STRING на соответствие PATTERN и печатает соответствующие подстроки. Только первое совпадение для каждой строки STRING отображается, если не указаны-aили--all, в этом случае отображаются все совпадения. Сопоставление может быть выполнено без учета регистра с-iили--ignore-case. Если-nили--indexуказаны, каждое совпадение отображается как позиция начала с 1 и длина. По умолчанию PATTERN интерпретируется как шаблон glob, сопоставляемый с каждым полным аргументом STRING. Шаблон glob считается допустимым совпадением только в том случае, если он совпадает со всей строкой STRING. Если-rили--regexуказаны, PATTERN интерпретируется как совместимый с Perl регулярный выражение, которое не обязательно должно совпадать со всей строкой STRING. Если регулярное выражение содержит группы захвата, для каждого совпадения будут сообщены несколько элементов: один для всего совпадения и один для каждой группы захвата. Если используется –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
Примеры замены Regex
> 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в другой оболочке.В таких случаях можно использовать
commandtestдля явного использования отдельной утилитыtestсистемы вместо этой встроенной командыbuiltintest.
Вернуться к индексу команд.
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: максимальный размер создаваемых файлов core. Установив этот предел в ноль, можно отключить запись core-дампов. -
-dили--data-size: максимальный размер сегмента данных процесса. -
-fили--file-size: максимальный размер создаваемых оболочкой файлов. -
-lили--lock-size: максимальный размер, который может быть заблокирован в памяти. -
-mили--resident-set-size: максимальный размер резидентного набора. -
-nили--file-descriptor-count: максимальное количество открытых дескрипторов файлов (в большинстве систем это значение нельзя установить). -
-sили--stack-size: максимальный размер стека. -
-tили--cpu-time: максимальное время использования процессора в секундах. -
-uили--process-count: максимальное количество процессов, доступных одному пользователю. -
-vили--virtual-memory-sizeМаксимальный объём виртуальной памяти, доступной оболочке.
Обратите внимание, что не все эти лимиты доступны во всех операционных системах.
Значение предела может быть числом в указанных для ресурса единицах или одним из специальных значений hard, soft, или unlimited, которые обозначают текущий жёсткий предел, текущий мягкий предел и отсутствие предела соответственно.
Если предел указан, это новое значение указанного ресурса. Если ни один параметр не указан, предполагается -f. Значения указаны в килобайтах, за исключением -t, которое в секундах, и -n и -u, которые являются значениями без масштабирования. Статус возврата равен 0, если не указан неверный параметр или аргумент, или при ошибке установки нового предела.
ulimit также принимает следующие ключи, определяющие тип устанавливаемого предела:
-
-Hили--hardустанавливает жёсткий лимит ресурса -
-Sили--softустанавливает мягкий лимит ресурса
Жёсткий предел можно только уменьшать. После установки его нельзя увеличить; мягкий предел можно увеличить до значения жёсткого предела. Если ни -H, ни -S не указаны, оба предела, мягкий и жёсткий, обновляются при присваивании нового значения предела, а при получении текущего значения используется мягкий предел.
Следующие дополнительные параметры также понимаются ulimit:
-
-aили--allвыводит все текущие лимиты
Реализация fish команды ulimit должна быть идентична реализации в bash, за исключением следующих различий:
- Fish
ulimitподдерживает длинные параметры GNU-стиля для всех ключей - Fish
ulimitне поддерживает параметр-pдля получения размера канала. Реализация в bash включает проверку на этапе компиляции, которая эмпирически угадывает это число, записывая в канал и ожидая SIGPIPE. Fish не делает этого, так как этот метод определения размера канала ненадежен. В зависимости от версии bash могут быть дополнительные лимиты для установки, которые отсутствуют в fish. - Fish
ulimitне поддерживает установку или получение нескольких лимитов в одной команде, за исключением вывода всех значений с помощью ключа -a
Пример
ulimit -Hs 64 устанавливает жёсткий лимит размера стека в 64 Кб.
Назад к списку команд.
umask - установка или получение маски создания файла
Синтаксис
umask [OPTIONS] [MASK]
Описание
Команда umask отображает и изменяет "umask", или маску создания файла, которая используется для ограничения доступа по умолчанию к файлам.
Указанная маска может быть представлена как восьмеричным числом, которое представляет права, которые будут удалены по умолчанию, или символически, что представляет только те права, которые будут предоставлены по умолчанию.
Права доступа объяснены в справочной странице для программы chmod(1).
Без параметров выводится текущая маска создания файла в восьмеричной форме.
-
-hили--helpвыводит это сообщение. -
-Sили--symbolicвыводит umask в символической форме вместо восьмеричной. -
-pили--as-commandвыводит umask в форме, которая может быть повторно использована в качестве входных данных
Если в качестве параметра задана числовая маска, текущая маска umask оболочки будет установлена на это значение, и права, заданные этой маской, по умолчанию будут удалены из новых файлов и каталогов.
Если задана символическая маска, желаемые биты разрешений, а не их обратные значения, должны быть указаны. Символическая маска представляет собой список прав, разделённых запятыми. Каждое право состоит из трёх частей:
- Первая часть указывает, кому применяются эти права и может быть одной из
u,g,oилиa, гдеuуказывает пользователя, являющегося владельцем файла,gуказывает владельца группы файла,oуказывает права других пользователей, аaуказывает, что должны быть изменены все три. - Вторая часть права указывает режим и может быть одной из
=,+или-, где=указывает, что права должны быть установлены на новое значение,+указывает, что указанное право должно быть добавлено к ранее указанным, а-указывает, что указанные права должны быть удалены из ранее указанных. - Третья часть права указывает, какие права должны быть изменены и может быть любой комбинацией
r,wиx, представляющих права чтения, записи и выполнения.
Если первая и вторая части пропущены, они предполагаются a и = соответственно. Например, r,u+w означает, что все пользователи должны иметь право на чтение, а владелец файла должен также иметь право на запись.
Обратите внимание, что символические маски в настоящее время работают не так, как задумано.
Пример
umask 177 или umask u=rw устанавливает маску создания файла на чтение и запись для владельца и отсутствие прав для всех других пользователей.
Назад к списку команд.
vared - интерактивное редактирование значения переменной среды
Синтаксис
vared VARIABLE_NAME
Описание
Команда vared используется для интерактивного редактирования значения переменной среды. Массивы переменных в целом не могут быть отредактированы с помощью vared, но отдельные элементы массива могут.
Пример
vared PATH[3] редактирует третий элемент массива PATH.
Назад к списку команд.
while - многократное выполнение команды
Синтаксис
while CONDITION; COMMANDS...; end
Описание
Команда while многократно выполняет CONDITION, и если выходной статус равен 0, то выполняет COMMANDS.
Если выходной статус CONDITION равен отличному от нуля в первом цикле, COMMANDS не будет выполнен вообще.
Вы можете использовать and или or для сложных условий. Ещё более сложный контроль может быть достигнут с помощью while true, содержащего break.
Пример
while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end # outputs 'file exists' at 10 second intervals as long as the file foo.txt or bar.txt exists.
Назад к списку команд.
© 2005–2009 Axel Liljencrantz
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/2.5/commands.html