Справочник команд
fish поставляется с большим количеством встроенных команд, функций shellscript и внешних команд. Все они описаны ниже.
Практически все команды fish отвечают на опции -h или --help, чтобы отобразить соответствующую справку, также доступную с помощью команд help и man, как показано ниже:
echo -h echo --help # Prints help to the terminal window man echo # Displays the man page in the system pager # (normally 'less', 'more' or 'most'). help echo # Open a web browser to show the relevant documentation
abbr - управление сокращениями fish
Синтаксис
abbr --add word phrase... abbr --show abbr --list abbr --erase word
Описание
abbr управляет списком сокращений, которые будет расширять fish.
Сокращения — это определённые пользователем последовательности символов или слова, которые заменяются более длинными фразами после их ввода. Например, часто используемая команда, такая как git checkout может быть сокращена до gco. После ввода gco и нажатия Пробел или Ввод, полная фраза git checkout появится в строке команд.
Сокращения хранятся в переменной, названной fish_user_abbreviations. Она автоматически создаётся как универсальная переменная при первом создании сокращения. Если вы хотите, чтобы ваши сокращения были приватными для конкретной сессии fish, вы можете добавить следующее в файл *~/.config/fish/config.fish* перед определением вашего первого сокращения:
if status --is-interactive
set -g fish_user_abbreviations
abbr --add first 'echo my first abbreviation'
abbr --add second 'echo my second abbreviation'
# etcetera
end
Вы можете создавать сокращения непосредственно в командной строке, и они будут автоматически сохранены и отображены в других сессиях fish, если fish_user_abbreviations является универсальной переменной. Если вы сохраняете переменную как универсальную, abbr --add в config.fish не сделают ничего, кроме незначительного замедления запуска.
Опции
Доступны следующие параметры:
-
-a WORD PHRASEили--add WORD PHRASEДобавляет новое сокращение, в результате чего WORD будет расширен до PHRASE. -
-sили--showОтображает все сокращённые слова и их расширенные фразы таким образом, чтобы их можно было экспортировать и импортировать. -
-lили--listВыводит список всех сокращённых слов. -
-e WORDили--erase WORDУдаляет сокращение WORD.
Примечание: версия fish 2.1 поддерживала -a WORD=PHRASE. Этот синтаксис теперь устарел, но всё ещё будет преобразован.
Примеры
abbr -a gco git checkout
Добавьте новое сокращение, где gco будет заменено на git checkout.
abbr -e gco
Удалите сокращение gco.
ssh another_host abbr -s | source
Импортируйте сокращения, определённые на другом хосте по SSH.
Возвращение к индексу команд.
alias - создание функции
Синтаксис
alias NAME DEFINITION alias NAME=DEFINITION
Описание
alias — это простой оболочечный интерфейс для встроенной команды function. Он существует для обратной совместимости с оболочками Posix. Для других целей рекомендуется определять функцию.
fish не отслеживает, какие функции были определены с помощью alias. Их нужно удалять с помощью functions -e.
-
NAME— имя алиаса -
DEFINITION— фактическая команда для выполнения. Строка$argvбудет добавлена.
Вы не можете создать алиас для функции с тем же именем.
Обратите внимание, что пробелы в вызове alias необходимо экранировать так же, как и в командной строке, *даже внутри кавычек*.
Пример
Следующий код создаст rmi, который при каждом вызове выполняет rm с дополнительными аргументами.
alias rmi "rm -i"
# This is equivalent to entering the following function:
function rmi
rm -i $argv
end
# This needs to have the spaces escaped or "Chrome.app..." will be seen as an argument to "/Applications/Google":
alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome banana'
Возвращение к индексу команд.
and - условное выполнение команды
Синтаксис
COMMAND1; and COMMAND2
Описание
and используется для выполнения команды, если текущий код завершения (установленный предыдущей командой) равен 0.
Выражения and могут использоваться в качестве части условия в блоке if или while. См. документацию по if и while для примеров.
and не изменяет текущий код завершения. Код завершения последней команды в фоновом режиме всегда доступен с помощью переменной $status.
Пример
Следующий код выполняет команду make для компиляции программы. Если компиляция прошла успешно, код завершения make равен 0, и программа устанавливается. Если любой из шагов завершается неудачно, код завершения равен 1, и выполняется make clean, который удаляет файлы, созданные в процессе компиляции.
make; and make install; or make clean
Возвращение к индексу команд.
begin - начало нового блока кода
Синтаксис
begin; [COMMANDS...;] end
Описание
begin используется для создания нового блока кода.
Блок выполняется безусловно. begin; ...; end эквивалентно if true; ...; end.
begin используется для группировки нескольких команд в блок. Это позволяет ввести новую область видимости переменных, перенаправить вход или выход набора команд как единого целого или указать приоритет при использовании условных команд, таких как and.
begin не изменяет текущий код завершения.
Пример
Следующий код устанавливает ряд переменных внутри области видимости блока. Поскольку переменные заданы внутри блока и имеют локальную область видимости, они автоматически удаляются по окончании блока.
begin
set -l PIRATE Yarrr
...
end
echo $PIRATE
# This will not output anything, since the PIRATE variable
# went out of scope at the end of the block
В следующем коде весь вывод перенаправляется в файл out.html.
begin
echo $xml_header
echo $html_header
if test -e $file
...
end
...
end > out.html
Возвращение к индексу команд.
bg - отправка задач в фоновый режим
Синтаксис
bg [PID...]
Описание
bg отправляет задачи в фоновый режим, возобновляя их, если они приостановлены. Задача в фоновом режиме выполняется одновременно с fish и не имеет доступа к клавиатуре. Если задача не указана, последняя используемая задача помещается в фоновый режим. Если указан PID, задачи с указанными идентификаторами группы процессов помещаются в фоновый режим.
Идентификатор процесса желаемой задачи обычно находится с помощью расширения процесса.
Пример
bg %1 поместит задачу с идентификатором 1 в фоновый режим.
Возвращение к индексу команд.
bind - обработка привязок клавиш fish
Синтаксис
bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE]
[(-k | --key)] SEQUENCE COMMAND [COMMAND...]
bind [(-M | --mode) MODE] [(-k | --key)] SEQUENCE
bind (-K | --key-names) [(-a | --all)]
bind (-f | --function-names)
bind (-e | --erase) [(-M | --mode) MODE]
(-a | --all | [(-k | --key)] SEQUENCE [SEQUENCE...])
Описание
bind добавляет привязку для указанной последовательности клавиш к указанной команде.
SEQUENCE — это последовательность символов для привязки. Они должны быть записаны как последовательности экранирования fish. Например, поскольку нажатие клавиши Alt и другой символ отправляет этот символ с префиксом escape-символа, привязки клавиш Alt могут быть записаны с использованием escape-последовательности \e. Например, Alt-w можно записать как \ew. Символ управления можно записать аналогичным образом, используя escape-последовательность \c , например, Control-X (^X) можно записать как \cx. Обратите внимание, что привязки клавиш Alt чувствительны к регистру, а привязки клавиш Control — нет. Это ограничение текстовых терминалов, а не fish.
Значение по умолчанию для привязки клавиш можно задать, указав SEQUENCE пустой строки (то есть, '' ). Оно будет использоваться всякий раз, когда не будет соответствия никаким другим привязанностям. Для большинства привязок клавиш имеет смысл использовать функцию self-insert (то есть bind '' self-insert) в качестве привязки по умолчанию. Это вставит в редактор любые нажатые клавиши, не имеющие конкретной привязки. Непечатаемые символы игнорируются редактором, поэтому это не приведёт к выводу управляющих последовательностей.
Если используется переключатель -k, используется имя клавиши (например, 'down', 'up' или 'backspace') вместо последовательности. Используемые имена соответствуют соответствующим переменным curses, но без префикса 'key_'. (См. terminfo(5) для получения дополнительной информации или используйте bind --key-names для получения списка всех доступных именованных клавиш.)
COMMAND может быть любой командой fish, но также может быть одной из набора специальных функций ввода. К ним относятся функции перемещения курсора, работы с кольцом отмены, выполнения автодополнения и т. д. Используйте bind --function-names для получения полного списка этих функций ввода.
Когда COMMAND является командой shellscript, хорошей практикой является поместить фактический код в функцию и просто привязать к имени функции. Таким образом, становится намного проще тестировать функцию во время редактирования, а результат обычно более читабелен.
Если такой скрипт генерирует вывод, скрипт должен завершаться вызовом commandline -f repaint , чтобы сообщить fish, что требуется перерисовка.
Если указано несколько COMMAND , они все выполняются в указанном порядке при нажатии клавиши.
Если SEQUENCE не указано, отображаются все привязки (или только привязки в указанном MODE). Если SEQUENCE указано без COMMAND, отображается только привязка, соответствующая этой последовательности.
Привязки клавиш по умолчанию не сохраняются между сессиями. Одиночные bind в config.fish не будут иметь никакого эффекта, так как он обрабатывается до настройки привязок по умолчанию. Чтобы сохранить пользовательские привязки клавиш, поместите bind в функцию, называемую fish_user_key_bindings, которая будет автоматически подключаться.
Привязки клавиш могут использовать «режимы», которые имитируют поведение модального ввода Vi. По умолчанию используется режим «default», и каждая привязка относится к одному режиму. Режим можно просмотреть/изменить с помощью переменной $fish_bind_mode.
Доступны следующие параметры:
-
-kили--keyУкажите имя клавиши, например, 'left' или 'backspace', вместо последовательности символов -
-Kили--key-namesОтобразить список доступных имён клавиш. Указание-aили--allвключает клавиши, у которых нет известного сопоставления -
-fили--function-namesОтобразить список доступных функций ввода -
-M MODEили--mode MODEУкажите режим привязки, в котором используется привязка. По умолчанию — "default" -
-m NEW_MODEили--sets-mode NEW_MODEИзменить текущий режим наNEW_MODEпосле выполнения этой привязки -
-eили--eraseУдалить привязку с заданной последовательностью и режимом вместо определения новой. Несколько последовательностей можно указать с этим флагом. Указание-aили--allс-Mили--modeудаляет все привязки в заданном режиме независимо от последовательности. Указание-aили--allбез-Mили--modeудаляет все привязки во всех режимах независимо от последовательности. -
-aили--allСм.--eraseи--key-names
Следующие специальные функции ввода доступны:
-
accept-autosuggestion, принять текущее автопредложение полностью -
backward-char, переместить на один символ влево -
backward-bigword, переместить на одно слово, разделённое пробелами, влево -
backward-delete-char, удалить один символ ввода слева от курсора -
backward-kill-bigword, переместить слово, разделённое пробелами, слева от курсора, в буфер обмена -
backward-kill-line, переместить всё от начала строки до курсора в буфер обмена -
backward-kill-path-component, переместить один компонент пути слева от курсора (всё от последнего "/" или пробела эксклюзивно) в буфер обмена -
backward-kill-word, переместить слово слева от курсора в буфер обмена -
backward-word, переместить одно слово влево -
beginning-of-history, переместиться к началу истории -
beginning-of-line, переместиться к началу строки -
begin-selection, начать выделение текста -
capitalize-word, сделать текущее слово с заглавной буквы -
complete, угадать оставшуюся часть текущего токена -
complete-and-search, вызвать настраиваемый просмотрщик доступных вариантов завершения -
delete-char, удалить один символ справа от курсора -
downcase-word, сделать текущее слово строчными буквами -
end-of-history, переместиться к концу истории -
end-of-line, переместиться к концу строки -
end-selection, завершить выделение текста -
forward-bigword, переместить на одно слово, разделённое пробелами, вправо -
forward-char, переместить на один символ вправо -
forward-word, переместить на одно слово вправо -
history-search-backward, выполнить поиск в истории по предыдущему совпадению -
history-search-forward, выполнить поиск в истории по следующему совпадению -
kill-bigword, переместить следующее слово, разделённое пробелами, в буфер обмена -
kill-line, переместить всё от курсора до конца строки в буфер обмена -
kill-selection, переместить выделенный текст в буфер обмена -
kill-whole-line, переместить строку в буфер обмена -
kill-word, переместить следующее слово в буфер обмена -
suppress-autosuggestion, удалить текущее автопредложение -
swap-selection-start-stop, перейти к другому концу выделенного текста без изменения выделения -
transpose-chars, транспонировать два символа слева от курсора -
transpose-words, транспонировать два слова слева от курсора -
upcase-word, сделать текущее слово заглавными буквами -
yank, вставить последнюю запись из буфера обмена в буфер -
yank-pop, повернуться к предыдущей записи из буфера обмена
Примеры
bind \cd 'exit'
Приводит к fish при нажатии Control-D.
bind -k ppage history-search-backward
Выполняет поиск в истории при нажатии клавиши Page Up.
set -g fish_key_bindings fish_vi_key_bindings bind -M insert \cc kill-whole-line force-repaint
Включает привязки клавиш Vi и перепривязывает Control-C для очистки строки ввода.
Специальный случай: символ escape
Ключ escape может использоваться автономно, например, для переключения из режима вставки в обычный режим при использовании привязок клавиш Vi. Escape также может использоваться в качестве «мета»-ключа для обозначения начала последовательности escape, такой как функции или стрелки. Также можно определить пользовательские привязки, начинающиеся с символа escape.
fish ждёт некоторое время после получения символа escape, чтобы определить, является ли он автономным или частью последовательности escape. Во время ожидания дополнительные нажатия клавиш заставляют символ escape вести себя как мета-ключ. Если другие нажатия клавиш не поступают, он обрабатывается как автономный escape. Время ожидания установлено в 300 миллисекунд (0,3 секунды) в стандартных привязках клавиш и 10 миллисекунд в привязках клавиш vi. Его можно настроить, установив переменную fish_escape_delay_ms со значением от 10 до 5000 мс. Рекомендуется сделать эту переменную универсальной и установить её один раз из интерактивной сессии.
Примечание: fish 2.2.0 и более ранние версии использовали значение по умолчанию 10 миллисекунд и не предоставляли способа его настройки. Это фактически сделало невозможным использование escape как мета-ключа.
Вернуться к индексу команд.
block - временно заблокировать доставку событий
Синтаксис
block [OPTIONS...]
Описание
block предотвращает доставку и обработку событий, вызванных fish или командой emit, в то время, пока блокировка активна.
В функциях block может быть полезно при выполнении задач, которые не должны прерываться оболочкой.
Блокировку можно снять. Любые события, возникшие во время действия блокировки, затем будут доставлены.
Блоки событий не следует путать с блоками кода, которые создаются с помощью begin, if, while или for
Доступны следующие параметры:
-
-lили--localАвтоматически снять блокировку в конце области действия текущего вложенного блока кода -
-gили--globalНикогда не снимать блокировку автоматически -
-eили--eraseСнять глобальную блокировку
Пример
# Create a function that listens for events function --on-event foo foo; echo 'foo fired'; end # Block the delivery of events block -g emit foo # No output will be produced block -e # 'foo fired' will now be printed
Вернуться к индексу команд.
break - остановить текущий внутренний цикл
Синтаксис
LOOP_CONSTRUCT; [COMMANDS...] break; [COMMANDS...] end
Описание
break прерывает выполнение текущего цикла, такого как цикл for или цикл while. Обычно он добавляется внутри блока условия, такого как оператор if или switch.
Для break параметров нет.
Пример
Следующий код ищет все файлы .c с «smurf» и прерывается при первом появлении.
for i in *.c
if grep smurf $i
echo Smurfs are present in $i
break
end
end
Вернуться к индексу команд.
breakpoint - Запустить режим отладки
Синтаксис
breakpoint
Описание
breakpoint используется для остановки выполняемого скрипта и запуска интерактивного приглашения для отладки.
Для получения дополнительной информации см. Отладка скриптов fish в руководстве fish.
Для breakpoint параметров нет.
Вернуться к индексу команд.
builtin - выполнить встроенную команду
Синтаксис
builtin BUILTINNAME [OPTIONS...]
Описание
builtin заставляет оболочку использовать встроенную команду вместо функции или программы.
Доступны следующие параметры:
-
-nили--namesПеречислить имена всех определённых встроенных команд
Пример
builtin jobs # executes the jobs builtin, even if a function named jobs exists
Вернуться к индексу команд.
case - условно выполнить блок команд
Синтаксис
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
Описание
switch выполняет один из нескольких блоков команд в зависимости от того, равно ли указанное значение одному из нескольких значений с подстановкой шаблонов. case используется вместе с оператором switch, чтобы определить, какой блок должен быть выполнен.
Каждая команда case получает один или несколько параметров. Первая команда case с параметром, соответствующим строке, указанной в команде switch, будет вычислена. case параметры могут содержать подстановки шаблонов. Для избежания обычного расширения подстановок шаблонов с именами файлов, их нужно экранировать или заключить в кавычки.
Обратите внимание, что fish не выполняет проход по оператору case. Выполняется только первое совпадение.
Обратите внимание, что подстановки команд в операторе case будут вычислены, даже если его тело не выполняется. Все подстановки, включая подстановки команд, должны быть выполнены до того, как значение может быть сравнено с параметром.
Пример
Если переменная $animal содержит название животного, следующий код попытается его классифицировать:
switch $animal
case cat
echo evil
case wolf dog human moose dolphin whale
echo mammal
case duck goose albatross
echo bird
case shark trout stingray
echo fish
# Note that the next case has a wildcard which is quoted
case '*'
echo I have no idea what a $animal is
end
Если вышеуказанный код был запущен с $animal установленным на whale, вывод будет mammal.
Вернуться к индексу команд.
cd - изменить директорию
Синтаксис
cd [DIRECTORY]
Описание
cd изменяет текущую рабочую директорию.
Если DIRECTORY предоставлен, он станет новой директорией. Если параметров нет, используется содержимое переменной среды HOME.
Если DIRECTORY — относительный путь, пути, указанные в массиве переменной среды CDPATH, будут использоваться в качестве префиксов для указанного пути.
Обратите внимание, что оболочка попытается изменить директорию без cd, если указано имя директории (начинающееся с ., / или ~, или заканчивающееся /).
Fish также предоставляет функцию-обёртку вокруг встроенной команды cd, которая понимает cd - как переход в предыдущую директорию. См. также prevd. Эта функция-обёртка сохраняет историю 25 наиболее посещаемых директорий в глобальных переменных $dirprev и $dirnext.
Примеры
cd # changes the working directory to your home directory. cd /usr/src/fish-shell # changes the working directory to /usr/src/fish-shell
Вернуться к индексу команд.
command - запустить программу
Синтаксис
command [OPTIONS] COMMANDNAME [ARGS...]
Описание
command заставляет оболочку выполнить программу COMMANDNAME и игнорировать любые функции или встроенные команды с таким же именем.
Доступны следующие параметры:
-
-sили--searchвозвращает имя файла диска, который должен быть выполнен, или ничего, если в$PATHне найдено файла с указанным именем.
С параметром -s command обрабатывает каждый аргумент как отдельную команду для поиска и устанавливает код завершения в 0, если любая из указанных команд найдена, или в 1, если ни одна из команд не найдена.
Для обеспечения базовой совместимости с POSIX command, флаг -v распознаётся как псевдоним для -s.
Примеры
command ls заставляет fish выполнить программу ls, даже если существует функция ls.
command -s ls возвращает путь к программе ls.
Возврат к индексу команд.
commandline - установка или получение текущего буфера командной строки
Синтаксис
commandline [OPTIONS] [CMD]
Описание
commandline может использоваться для установки или получения текущего содержимого буфера командной строки.
Без параметров commandline возвращает текущее значение командной строки.
При указании параметра CMD, буфер командной строки очищается и заменяется содержимым CMD.
Доступны следующие параметры:
-
-Cили--cursorустанавливают или получают текущую позицию курсора, а не содержимое буфера. Если аргумент не указан, печатается текущая позиция курсора, в противном случае аргумент интерпретируется как новая позиция курсора. -
-fили--functionвводят функции readline в читатель. Этот параметр не может быть объединён с другими параметрами. Он приведет к тому, что все дополнительные аргументы будут интерпретированы как функции readline, и эти функции будут введены в читатель, так что они будут возвращены в читатель до того, как будут считаны любые дополнительные фактические нажатия клавиш.
Следующие параметры изменяют способ, которым commandline обновляет буфер командной строки:
-
-aили--appendне удаляет текущую командную строку, добавляет указанную строку в конец. -
-iили--insertне удаляет текущую командную строку, вставляет указанную строку в текущую позицию курсора. -
-rили--replaceудаляет текущую командную строку и заменяет её указанной строкой (по умолчанию).
Следующие параметры изменяют часть командной строки, которая печатается или обновляется:
-
-bили--current-bufferвыбирает весь буфер (по умолчанию). -
-jили--current-jobвыбирает текущую задачу. -
-pили--current-processвыбирает текущий процесс. -
-tили--current-tokenвыбирает текущий токен.
Следующие параметры изменяют способ, которым commandline выводит текущий буфер командной строки:
-
-cили--cut-at-cursorвыводит только выбор до текущей позиции курсора. -
-oили--tokenizeтокенизирует выбор и выводит один токен типа строки в строке.
Если commandline вызывается во время вызова для завершения заданной строки с помощью complete -C STRING, commandline будет считать указанную строку текущим содержимым командной строки.
Следующие параметры выдают метаданные о состоянии командной строки:
-
-Lили--lineвыводит строку, на которой находится курсор, начиная с верхней строки с 1. -
-Sили--search-modeвозвращает true, если командная строка выполняет поиск в истории. -
-Pили--paging-modeвозвращает true, если командная строка отображает содержимое страницы, например, результаты автодополнения.
Пример
commandline -j $history[3] заменяет задачу под курсором третьим элементом из истории командной строки.
Если командная строка содержит
> echo $flounder >&2 | less; and echo $catfish
(с курсором на "о" в "flounder")
Тогда следующие вызовы работают так:
> commandline -t $flounder > commandline -ct $fl > commandline -b ## or just commandline echo $flounder >&2 | less; and echo $catfish > commandline -p echo $flounder >&2 > commandline -j echo $flounder >&2 | less
Возврат к индексу команд.
complete - редактирование команд специфических автодополнений
Синтаксис
complete ( -c | --command | -p | --path ) COMMAND
[( -c | --command | -p | --path ) COMMAND]...
[( -e | --erase )]
[( -s | --short-option ) SHORT_OPTION]...
[( -l | --long-option | -o | --old-option ) LONG_OPTION]...
[( -a | --arguments ) OPTION_ARGUMENTS]
[( -f | --no-files )]
[( -r | --require-parameter )]
[( -x | --exclusive )]
[( -w | --wraps ) WRAPPED_COMMAND]...
[( -n | --condition ) CONDITION]
[( -d | --description ) DESCRIPTION]
complete ( -C[STRING] | --do-complete[=STRING] )
Описание
Для ознакомления с указанием автодополнений см. Написание собственных автодополнений в руководстве fish.
-
COMMAND— имя команды, для которой нужно добавить автодополнение. -
SHORT_OPTION— односимвольный параметр для команды. -
LONG_OPTION— многосимвольный параметр для команды. -
OPTION_ARGUMENTS— параметр, содержащий список возможных аргументов параметра, которые могут содержать подстановки команд. -
DESCRIPTION— описание того, что делает параметр и/или аргументы параметра. -
-c COMMANDили--command COMMANDуказывает, чтоCOMMAND— имя команды. -
-p COMMANDили--path COMMANDуказывает, чтоCOMMAND— абсолютный путь к программе (по возможности содержащий подстановки). -
-eили--eraseудаляет указанное автодополнение. -
-s SHORT_OPTIONили--short-option=SHORT_OPTIONдобавляет короткий параметр в список автодополнений. -
-l LONG_OPTIONили--long-option=LONG_OPTIONдобавляет параметр в стиле GNU в список автодополнений. -
-o LONG_OPTIONили--old-option=LONG_OPTIONдобавляет параметр в стиле старого списка автодополнений (см. подробности ниже). -
-a OPTION_ARGUMENTSили--arguments=OPTION_ARGUMENTSдобавляет указанные аргументы параметра в список автодополнений. -
-fили--no-filesуказывает, что параметры, определённые этим автодополнением, не могут быть после имени файла. -
-rили--require-parameterуказывает, что параметры, указанные этим автодополнением, всегда должны иметь аргумент параметра, т. е. не могут быть после другого параметра. -
-xили--exclusiveподразумевает как-r, так и-f. -
-w WRAPPED_COMMANDили--wraps=WRAPPED_COMMANDзаставляет указанную команду унаследовать автодополнения от обернутой команды (см. подробности ниже). -
-nили--conditionуказывает команду оболочки, которая должна вернуть 0, если автодополнение должно быть использовано. Это позволяет указать автодополнения, которые должны использоваться только в некоторых случаях. -
-CSTRINGили--do-complete=STRINGзаставляет complete попытаться найти все возможные автодополнения для указанной строки. -
-Cили--do-completeбез аргумента заставляет complete попытаться найти все возможные автодополнения для текущего буфера командной строки. Если оболочка не в интерактивном режиме, возвращается ошибка.
Командно-специфические автодополнения в fish основаны на понятии параметров и аргументов. Параметр — это параметр, который начинается с дефиса, например, '-h', '-help' или '--help'. Аргументы — это параметры, которые не начинаются с дефиса. Fish распознаёт три стиля параметров, такие же, как в GNU-версии библиотеки getopt. Эти стили:
- Короткие параметры, как '
-a'. Короткие параметры имеют длину в один символ, предваряются одним дефисом и могут быть сгруппированы (например, '-la', что эквивалентно '-l -a'). Аргументы параметров могут быть указаны в следующем параметре ('-w 32') или путём добавления значения к параметру ('-w32'). - Параметры старого стиля, как '
-Wall'. Параметры старого стиля могут иметь длину более одного символа, предваряются одним дефисом и не могут быть сгруппированы. Аргументы параметров указываются в следующем параметре ('-ao null'). - Параметры стиля GNU, как '
--colors'. Параметры стиля GNU могут иметь длину более одного символа, предваряются двумя дефисами, и не могут быть сгруппированы. Аргументы параметров могут быть указаны в следующем параметре ('--quoting-style shell') или путём добавления к параметру '=' и значения ('--quoting-style=shell'). Параметры стиля GNU могут быть сокращены, до тех пор пока сокращение уникально ('--h') эквивалентно '--help', если help — единственный параметр, начинающийся с 'h').
Параметры для указания имени команды и пути к команде можно использовать несколько раз для определения одних и тех же автодополнений для нескольких команд.
Параметры для указания переключателей команды и обернутых команд можно использовать несколько раз для определения нескольких автодополнений для команды(ей) в одном вызове.
Вызов complete несколько раз для одной и той же команды добавляет новые определения поверх любых существующих автодополнений, определённых для команды.
Когда -a или --arguments указываются вместе с длинными, короткими или параметрами старого стиля, указанные аргументы используются только как автодополнения при попытке дополнить аргумент для любого из указанных параметров. Если -a или --arguments указываются без каких-либо длинных, коротких или параметров старого стиля, указанные аргументы используются при завершении любого аргумента команды (кроме завершения аргумента параметра, который был указан с -r или --require-parameter).
Подстановки команд, найденные в OPTION_ARGUMENTS, не должны возвращать список аргументов, разделённых пробелами. Вместо этого они должны возвращать список аргументов, разделённых символом новой строки, и каждый аргумент может иметь символ табуляции, за которым следует описание аргумента. Любое описание, предоставленное таким образом, переопределяет описание, заданное с помощью -d или --description.
Параметры -w или --wraps заставляют указанную команду унаследовать автодополнения от другой команды. Говорят, что команда-наследник "оборачивает" унаследованную команду. У обернутой команды могут быть свои автодополнения в дополнение к унаследованным. Команда может обернуть несколько команд, а обертывание является транзитивным: если A оборачивает B, а B оборачивает C, тогда A автоматически наследует все автодополнения C. Обертывание можно удалить, используя параметры -e или --erase.
Обратите внимание, что обертывание работает только для автодополнений, указанных с помощью -c или --command, и игнорируется при указании автодополнений с -p или --path.
При удалении автодополнений можно либо удалить все автодополнения для определённой команды, указав complete -c COMMAND -e, или указать определённый параметр автодополнения для удаления, указав короткий, длинный или параметр старого стиля.
Пример
Короткий параметр -o для команды gcc требует, чтобы за ним следовал файл. Это можно сделать, написав:
complete -c gcc -s o -r
Вариант краткого стиля -d для команды grep требует, чтобы одна из строк 'read', 'skip' или 'recurse' была использована. Это можно указать, написав:
complete -c grep -s d -x -a "read skip recurse"
Команда su принимает любой имя пользователя в качестве аргумента. Имена пользователей предоставляются как первое поле, разделенное двоеточием, в файле /etc/passwd. Это можно указать как:
complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"
Команда rpm имеет несколько различных режимов. Если был указан флаг -e или --erase, rpm должна удалить один или несколько пакетов, в этом случае несколько переключателей, связанных с удалением пакетов, являются допустимыми, например, переключатель nodeps.
Это можно записать так:
complete -c rpm -n "__fish_contains_opt -s e erase" -d nodeps "Don't check dependencies"
где __fish_contains_opt — функция, которая проверяет буфер командной строки на наличие указанного набора опций.
Для реализации псевдонима используйте опцию -w или --wraps.
complete -c hub -w git
Теперь hub наследует все автодополнения от git. Обратите внимание, что это также можно указать в объявлении функции.
Вернуться к индексу команд.
contains - проверить, есть ли слово в списке
Синтаксис
contains [OPTIONS] KEY [VALUES...]
Описание
contains проверяет, содержит ли набор VALUES строку KEY. Если да, contains завершается со статусом 0; если нет, он завершается со статусом 1.
Доступны следующие опции:
-
-iили--indexвывести индекс слова
Обратите внимание, что, как и инструменты GNU, contains интерпретирует все аргументы, начинающиеся с -, как опции для contains, пока не достигнет аргумента, который -- (два дефиса). См. примеры ниже.
Пример
for i in ~/bin /usr/local/bin
if not contains $i $PATH
set PATH $PATH $i
end
end
Вышеприведенный код проверяет, находятся ли ~/bin и /usr/local/bin в пути, и добавляет их, если нет.
function hasargs
if contains -- -q $argv
echo '$argv contains a -q option'
end
end
Вышеприведенный код проверяет наличие -q в списке аргументов, используя аргумент -- для разграничения опций для contains от ключа для поиска.
Вернуться к индексу команд.
continue - пропустить оставшуюся часть текущей итерации текущего внутреннего цикла
Синтаксис
LOOP_CONSTRUCT; [COMMANDS...;] continue; [COMMANDS...;] end
Описание
continue пропускает оставшуюся часть текущей итерации текущего внутреннего цикла, например, цикла for или цикла while. Обычно он добавляется внутри условного блока, например, оператора if или оператора switch.
Пример
Следующий код удаляет все файлы tmp, которые не содержат слово smurf.
for i in *.tmp
if grep smurf $i
continue
end
rm $i
end
Вернуться к индексу команд.
count - посчитать количество элементов массива
Синтаксис
count $VARIABLE
Описание
count выводит количество аргументов, переданных ему. Это обычно используется для определения того, сколько элементов содержит массив переменных среды.
count не принимает никаких опций, включая -h или --help.
count завершается с ненулевым кодом выхода, если ему не были переданы аргументы, и с нулевым, если было передано хотя бы один аргумент.
Пример
count $PATH # Returns the number of directories in the users PATH variable. count *.txt # Returns the number of files in the current working directory ending with the suffix '.txt'.
Вернуться к индексу команд.
dirh - вывести историю каталогов
Синтаксис
dirh
Описание
dirh выводит текущую историю каталогов. Текущая позиция в истории выделяется цветом, определенным в переменной среды fish_color_history_current.
dirh не принимает никаких параметров.
Обратите внимание, что команда cd ограничивает историю каталогов 25 наиболее недавно посещенными каталогами. История хранится в переменных $dirprev и $dirnext.
Вернуться к индексу команд.
dirs - вывести стек каталогов
Синтаксис
dirs dirs -c
Описание
dirs выводит текущий стек каталогов, созданный командой pushd.
С "-c" он очищает стек каталогов вместо этого.
dirs не принимает никаких параметров.
Вернуться к индексу команд.
echo - отобразить строку текста
Синтаксис
echo [OPTIONS] [STRING]
Описание
echo отображает строку текста.
Доступны следующие опции:
-
-n, Не выводить символ новой строки -
-s, Не разделять аргументы пробелами -
-E, Отключить интерпретацию обратных слешей (по умолчанию) -
-e, Включить интерпретацию обратных слешей
Последовательности escape
Если используется -e, распознаются следующие последовательности:
-
\обратный слэш -
\aсигнал (BEL) -
\bbackspace -
\cбольше не выводить -
\eescape -
\fподача формы -
\nновая строка -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\0NNNбайт с восьмеричным значением NNN (1-3 цифры) -
\xHHбайт с шестнадцатеричным значением HH (1-2 цифры)
Пример
echo 'Hello World'
Вывести hello world в стандартный вывод
echo -e 'Top\nBottom'
Вывести Top и Bottom на отдельных строках, используя последовательность escape
Вернуться к индексу команд.
else - выполнить команду, если условие не выполняется
Синтаксис
if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end
Описание
if выполнит команду CONDITION. Если код выхода условия равен 0, будут выполнены команды COMMANDS_TRUE. Если он не равен 0 и указан else, будет выполнена COMMANDS_FALSE.
Пример
Следующий код проверяет, является ли файл foo.txt обычным файлом.
if test -f foo.txt
echo foo.txt exists
else
echo foo.txt does not exist
end
Вернуться к индексу команд.
emit - Издать общее событие
Синтаксис
emit EVENT_NAME [ARGUMENTS...]
Описание
emit излучает или генерирует событие. События доставляются или улавливаются специальными функциями, называемыми обработчиками событий. Аргументы передаются обработчикам событий в качестве аргументов функции.
Пример
Следующий код сначала определяет обработчик событий для общего события с именем 'test_event', а затем излучает событие этого типа.
function event_test --on-event test_event
echo event test: $argv
end
emit test_event something
Вернуться к индексу команд.
end - завершить блок команд.
Синтаксис
begin; [COMMANDS...] end if CONDITION; COMMANDS_TRUE...; [else; COMMANDS_FALSE...;] end while CONDITION; COMMANDS...; end for VARNAME in [VALUES...]; COMMANDS...; end switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
Описание
end завершает блок команд.
Для получения дополнительной информации ознакомьтесь с документацией по блоковым конструкциям, таким как if, for и while.
Команда end не изменяет текущий код выхода.
Вернуться к индексу команд.
eval - вычислить указанные команды
Синтаксис
eval [COMMANDS...]
Описание
eval вычисляет указанные параметры как команду. Если указано более одного параметра, все параметры будут объединены с помощью пробела в качестве разделителя.
Пример
Следующий код вызовет команду ls. Обратите внимание, что fish не поддерживает использование переменных оболочки как прямых команд; для обхода этой проблемы можно использовать eval.
set cmd ls eval $cmd
Вернуться к индексу команд.
exec - выполнить команду в текущем процессе
Синтаксис
exec COMMAND [OPTIONS...]
Описание
exec заменяет текущую работающую оболочку новой командой. При успешном завершении exec никогда не возвращается. exec не может быть использован внутри конвейера.
Пример
exec emacs запускает текстовый редактор emacs и завершает fish. При завершении emacs сеанс завершится.
Вернуться к индексу команд.
exit - выйти из оболочки
Синтаксис
exit [STATUS]
Описание
exit вызывает выход fish. Если STATUS предоставлено, оно будет преобразовано в целое число и использовано в качестве кода выхода. В противном случае код выхода будет таким же, как у последней выполненной команды.
Если exit вызывается во время загрузки файла (с помощью встроенной команды source), остальная часть файла будет пропущена, но сама оболочка не выйдет.
Вернуться к индексу команд.
false - вернуть неудачный результат
Синтаксис
false
Описание
false устанавливает код выхода в 1.
Вернуться к индексу команд.
fg - перевести задание в фоновый режим
Синтаксис
fg [PID]
Описание
fg переводит указанное задание в фоновый режим, возобновляя его, если оно приостановлено. Пока выполняется задание в фоновом режиме, fish приостанавливается. Если задание не указано, последнее используемое задание переводится в фоновый режим. Если указан PID, задание с указанным идентификатором группы переводится в фоновый режим.
Идентификатор процесса целевого процесса обычно находится с помощью расширения процесса. Fish способен расширять гораздо больше, чем просто числовой PID, включая ссылки на себя и поиск PID по имени.
Пример
fg %1 переведет задание с идентификатором задания 1 в фоновый режим.
Вернуться к индексу команд.
fish - дружелюбная интерактивная оболочка
Синтаксис
fish [OPTIONS] [-c command] [FILE [ARGUMENTS...]]
Описание
fish - оболочка командной строки, разработанная в основном для интерактивного использования. Полное руководство доступно в формате HTML, используя команду help внутри fish.
Доступны следующие опции:
-
-cили--command=COMMANDSвыполнить указанные команды вместо чтения из командной строки -
-dили--debug-level=DEBUG_LEVELуказать уровень подробности fish. Более высокое число означает более высокий уровень подробности. По умолчанию уровень равен 1. -
-iили--interactiveуказать, что fish должен работать в интерактивном режиме -
-lили--loginуказать, что fish должен работать как оболочка входа в систему -
-nили--no-executeне выполнять никакие команды, а только проверять синтаксис -
-pили--profile=PROFILE_FILEпри выходе fish выводить информацию о времени выполнения всех выполненных команд в указанный файл -
-vили--versionотобразить версию и выйти -
-Dили--debug-stack-frames=DEBUG_LEVELуказать, сколько кадров стека отображать при записи сообщений отладки. По умолчанию значение равно нулю. Значение 3 или 4 обычно достаточно для понимания того, как был достигнут данный вызов отладки, но вы можете указать значение до 128.
Код завершения fish обычно соответствует коду завершения последней команды в фоновом режиме. Если fish завершается из-за синтаксической ошибки, код завершения равен 127.
Вернуться к списку команд.
fish_config - запуск веб-интерфейса конфигурации
Описание
fish_config запускает веб-интерфейс конфигурации.
Веб-интерфейс позволяет просматривать функции, переменные и историю, а также вносить изменения в конфигурацию приглашения и цветов.
fish_config запускает локальный веб-сервер и открывает окно веб-браузера; после завершения работы закройте окно браузера, а затем нажмите клавишу Enter, чтобы завершить сеанс конфигурации.
fish_config необязательно принимает имя начальной вкладки конфигурации. Например, fish_config history запустит интерфейс конфигурации с вкладкой истории.
Если переменная среды BROWSER установлена, она будет использоваться в качестве имени веб-браузера для открытия вместо системного по умолчанию.
Пример
fish_config открывает новое окно веб-браузера и позволяет настроить определенные настройки fish.
Вернуться к списку команд.
fish_indent - отступ и форматирование
Синтаксис
fish_indent [OPTIONS]
Описание
fish_indent используется для форматирования отступов кода fish. fish_indent читает команды из стандартного ввода и выводит их на стандартный вывод или в указанный файл.
Доступны следующие параметры:
-
-wили--writeформатирует указанный файл и немедленно записывает его в этот файл. -
-iили--no-indentне форматировать команды; только переформатировать на одну задачу на строку. -
-vили--versionотображает текущую версию fish и затем выходит. -
--ansiподсвечивает вывод с помощью последовательностей ANSI-экранов, соответствующих текущему значению $TERM, используя цвета, определённые в среде (например,$fish_color_command). -
--htmlвыводит HTML, который поддерживает подсветку синтаксиса, если определён соответствующий CSS. Имена классов CSS совпадают с именами переменных, напримерfish_color_command. -
-dили--debug-level=DEBUG_LEVELвключает вывод отладки и указывает уровень подробности (какfish -d). По умолчанию 0. -
-Dили--debug-stack-frames=DEBUG_LEVELуказать, сколько кадров стека отображать при записи сообщений отладки. По умолчанию значение равно нулю. Значение 3 или 4 обычно достаточно для понимания того, как был достигнут данный вызов отладки, но вы можете указать значение до 128. -
--dump-parse-treeвыводит информацию о разобранных операторах в stderr. Это, скорее всего, будет интересно только тем, кто работает с исходным кодом fish.
Вернуться к списку команд.
fish_key_reader - изучение символов, отправляемых клавишами клавиатуры
Синтаксис
fish_key_reader [OPTIONS]
Описание
fish_key_reader используется для изучения входных данных, полученных от терминала, и может помочь с назначением клавиш. Программа интерактивна и работает со стандартным вводом. Отображаются сами символы и их шестнадцатеричные значения.
Программа напишет пример команды bind соответствующей захваченной последовательности символов в stdout. Если последовательность символов соответствует имени специальной клавиши (см. bind --key-names), будет показано использование bind CHARS ... и bind -k KEYNAME .... Дополнительные сведения о полученных символах, такие как задержка между символами, выводятся в stderr.
Доступны следующие параметры:
-
-cили--continuousначинает сеанс, где можно просмотреть несколько последовательностей нажатий клавиш. По умолчанию программа завершается после захвата одной последовательности нажатий клавиш. -
-dили--debug-level=DEBUG_LEVELвключает вывод отладки и задаёт уровень подробности (например,fish -d). По умолчанию 0. -
-Dили--debug-stack-frames=DEBUG_LEVELуказать, сколько кадров стека отображать при записи сообщений отладки. По умолчанию значение равно нулю. Значение 3 или 4 обычно достаточно для понимания того, как был достигнут данный вызов отладки, но вы можете указать значение до 128. -
-hили--helpвыводит информацию об использовании.
Примечания по использованию
Задержка в миллисекундах с момента получения предыдущего символа включена в диагностическую информацию, выводимую в stderr. Эта информация может быть полезна для определения оптимальной настройки fish_escape_delay_ms или ознакомления с количеством задержки, вносимой инструментами, такими как ssh, mosh или tmux.
fish_key_reader намеренно отключает обработку многих сигналов. Чтобы завершить fish_key_reader в режиме --continuous:
- нажмите
Ctrl-Cдважды, или - нажмите
Ctrl-Dдважды, или - введите
exit, или - введите
quit
Вернуться к списку команд.
fish_mode_prompt - определение внешнего вида индикатора режима
Синтаксис
fish_mode_prompt выведет индикатор режима для использования в режиме vi.
Описание
Вывод fish_mode_prompt будет отображаться в позиции индикатора режима слева от обычного приглашения.
Несколько строк в fish_mode_prompt не поддерживаются.
Вернуться к списку команд.
fish_prompt - определение внешнего вида приглашения командной строки
Синтаксис
function fish_prompt
...
end
Описание
Определяя функцию fish_prompt, пользователь может выбрать пользовательское приглашение. Функция fish_prompt выполняется, когда требуется отобразить приглашение, и вывод используется в качестве приглашения.
Код завершения команд внутри fish_prompt не изменяет значение $status вне функции fish_prompt.
fish поставляется с несколькими примерами приглашений, которые можно выбрать с помощью команды fish_config.
Пример
Простое приглашение:
function fish_prompt -d "Write out the prompt"
printf '%s@%s%s%s%s> ' (whoami) (hostname | cut -d . -f 1) \
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
end
Вернуться к списку команд.
fish_right_prompt - определение внешнего вида правого приглашения командной строки
Синтаксис
function fish_right_prompt
...
end
Описание
fish_right_prompt аналогично fish_prompt, за исключением того, что оно отображается в правой части окна терминала.
Несколько строк в fish_right_prompt не поддерживаются.
Пример
Простое правое приглашение:
function fish_right_prompt -d "Write out the right prompt"
date '+%m/%d/%y'
end
Вернуться к списку команд.
fish_update_completions - обновление дополнений с помощью руководств
Описание
fish_update_completions анализирует руководства, установленные в системе, и пытается создать файлы дополнений в каталоге конфигурации fish.
Это не перезаписывает пользовательские дополнения.
Для fish_update_completions параметров нет.
Вернуться к списку команд.
fish_vi_mode - включить режим vi
Синтаксис
fish_vi_mode
Описание
Эта функция устарела. Пожалуйста, вызовите fish_vi_key_bindings directly
fish_vi_mode входит в режим редактирования команд, подобный vi. Чтобы всегда запускать ви-режим, добавьте fish_vi_mode в свой файл config.fish.
Вернуться к списку команд.
for - выполнение набора команд несколько раз.
Синтаксис
for VARNAME in [VALUES...]; COMMANDS...; end
Описание
for - это конструкция цикла. Он будет выполнять команды, указанные в COMMANDS, несколько раз. На каждой итерации локальная переменная, указанная в VARNAME, получает новое значение из VALUES. Если VALUES пуста, COMMANDS не будет выполняться вообще.
Пример
for i in foo bar baz; echo $i; end # would output: foo bar baz
Вернуться к списку команд.
funced - редактирование функции интерактивно
Синтаксис
funced [OPTIONS] NAME
Описание
funced предоставляет интерфейс для редактирования определения функции NAME.
Если переменная среды $VISUAL установлена, она будет использоваться как программа для редактирования функции. Если $VISUAL не установлена, но $EDITOR установлена, она будет использована. В противном случае будет использоваться встроенный редактор.
Если нет функции с именем NAME, будет создана новая функция с указанным именем
-
-e commandили--editor commandОткрыть тело функции внутри текстового редактора, заданного командой (например, "vi"). Команда 'fish' будет использовать встроенный редактор. -
-iили--interactiveОткрыть тело функции во встроенном редакторе.
Вернуться к списку команд.
funcsave - сохранение определения функции в каталог автозагрузки пользователя
Синтаксис
funcsave FUNCTION_NAME
Описание
funcsave сохраняет текущее определение функции в файл в каталоге конфигурации fish. Эта функция будет автоматически загружаться текущими и будущими сессиями fish. Это может быть полезно, если вы интерактивно создали новую функцию и хотите сохранить её для последующего использования.
Обратите внимание, что, поскольку fish загружает функции по требованию, сохранённые функции не будут работать как обработчики событий, пока они не будут выполнены или загружены другим способом. Чтобы активировать обработчик событий для каждого нового командного интерпретатора, добавьте функцию в ваш файл инициализации командного интерпретатора вместо использования funcsave.
Вернуться к списку команд.
функция - создание функции
Синопсис
function NAME [OPTIONS]; BODY; end
Описание
function создаёт новую функцию NAME с телом BODY.
Функция представляет собой список команд, которые будут выполнены при вводе имени функции как команды.
Доступны следующие параметры:
-
-a NAMESили--argument-names NAMESприсваивает значение последующих аргументов командной строки именам, указанным в NAMES. -
-d DESCRIPTIONили--description=DESCRIPTIONявляется описанием того, что делает функция, подходящим для описания автодополнения. -
-w WRAPPED_COMMANDили--wraps=WRAPPED_COMMANDзаставляет функцию наследовать автодополнение от указанной обернутой команды. Подробнее см. документацию поcomplete. -
-eили--on-event EVENT_NAMEсообщает fish о запуске этой функции при возникновении указанного имени события. Fish генерирует внутренние события с именами, например, при отображении приглашения. -
-vили--on-variable VARIABLE_NAMEсообщает fish о запуске этой функции при изменении значения переменной VARIABLE_NAME. -
-j PGIDили--on-job-exit PGIDсообщает fish о запуске этой функции при завершении задачи с идентификатором группы PGID. Вместо PGID можно указать строку 'caller'. Это допустимо только в подстановке команд и приведёт к запуску обработчика при завершении задачи, которая создала эту подстановку команд. -
-p PIDили--on-process-exit PIDсообщает fish о запуске этой функции при завершении дочернего процесса fish с идентификатором процесса PID. -
-sили--on-signal SIGSPECсообщает fish о запуске этой функции при получении сигнала SIGSPEC. SIGSPEC может быть номером сигнала или именем сигнала, таким как SIGHUP (или просто HUP). -
-Sили--no-scope-shadowingпозволяет функции получать доступ к переменным вызывающих функций. Обычно любые переменные внутри функции, имеющие то же имя, что и переменные из вызывающей функции, «затеняются», и их содержимое независимо от вызывающей функции. -
-Vили--inherit-variable NAMEсоздаёт моментальное изображение значения переменнойNAMEи определяет локальную переменную с тем же именем и значением при выполнении функции.
Если пользователь введёт дополнительные аргументы после функции, они будут вставлены в массив переменных окружения массив переменных $argv. Если указан параметр --argument-names, аргументы также будут присвоены именам, указанным в этом параметре.
Используя один из переключателей обработчиков событий, функцию можно запустить автоматически при определённых событиях. Пользователь может создавать новые события с помощью встроенной команды emit. Fish генерирует следующие события с именами:
-
fish_prompt, которое генерируется всякий раз, когда о предстоящем отображении нового приглашения fish. -
fish_command_not_found, которое генерируется всякий раз, когда не удалось найти команду. -
fish_preexec, которое генерируется непосредственно перед выполнением интерактивной команды. Командная строка передаётся в качестве первого параметра.Примечание: Это событие будет генерироваться даже если команда недействительна. Параметр командной строки содержит всю командную строку дословно и может потенциально содержать новые строки.
-
fish_postexec, которое генерируется непосредственно после выполнения интерактивной команды. Командная строка передаётся в качестве первого параметра.Примечание: Это событие будет генерироваться даже если команда недействительна. Параметр командной строки содержит всю командную строку дословно и может потенциально содержать новые строки.
Пример
function ll
ls -l $argv
end
выполнит команду ls, используя параметр -l, при этом любые дополнительные файлы и переключатели будут переданы в ls.
function mkdir -d "Create a directory and set CWD"
command mkdir $argv
if test $status = 0
switch $argv[(count $argv)]
case '-*'
case '*'
cd $argv[(count $argv)]
return
end
end
end
Это выполнит команду mkdir, и если она будет успешной, изменит текущую рабочую директорию на только что созданную.
function notify
set -l job (jobs -l -g)
or begin; echo "There are no jobs" >&2; return 1; end
function _notify_job_$job --on-job-exit $job --inherit-variable job
echo -n \a ## beep
functions -e _notify_job_$job
end
end
Это воспроизведёт звуковой сигнал при завершении последней задачи.
Вернуться к списку команд.
functions - вывод или удаление функций
Синопсис
functions [ -a | --all ] [ -n | --names ] functions -c OLDNAME NEWNAME functions -d DESCRIPTION FUNCTION functions [ -e | -q ] FUNCTIONS...
Описание
functions выводит или удаляет функции.
Доступны следующие параметры:
-
-aили--allотображает все функции, в том числе те, чьи имена начинаются с подчёркивания. -
-c OLDNAME NEWNAMEили--copy OLDNAME NEWNAMEсоздаёт новую функцию с именем NEWNAME, используя определение функции OLDNAME. -
-d DESCRIPTIONили--description=DESCRIPTIONизменяет описание этой функции. -
-eили--eraseприводит к удалению указанных функций. -
-nили--namesвыводит имена всех определённых функций. -
-qили--queryпроверяет, существуют ли указанные функции.
По умолчанию functions, вызываемая без аргументов, выводит имена всех определённых функций. За исключением параметра -a, функции, имена которых начинаются с подчёркивания, в выходные данные не включаются.
Если указаны какие-либо параметры, отличные от параметров, определения указанных функций выводятся.
Автозагружаемые функции не могут быть удалены с помощью functions -e. Чтобы удалить автозагружаемые функции, нужно удалить файл определения или изменить переменную $fish_function_path.
Копирование функции с помощью -c копирует только тело функции и не прикрепляет уведомления о событиях из исходной функции.
Описание одной функции может быть изменено только в одном вызове functions -d.
Код возврата functions — это количество функций в списке аргументов, которые не существуют. Это можно использовать совместно с параметром -q.
Примеры
functions -n # Displays a list of currently-defined functions functions -c foo bar # Copies the 'foo' function to a new function called 'bar' functions -e bar # Erases the function `bar`
Вернуться к списку команд.
help - отобразить документацию fish
Синопсис
help [SECTION]
Описание
help отображает справочную документацию fish.
Если указана команда SECTION, будет показана справка по этой команде.
Если переменная окружения BROWSER установлена, она будет использоваться для отображения документации. В противном случае fish будет искать подходящий браузер.
Обратите внимание, что большинство встроенных команд отображают свою справку в терминале при использовании параметра --help.
Пример
help fg отображает документацию для встроенной команды fg.
Вернуться к списку команд.
history - отображение и управление историей команд
Синопсис
history search [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] [ --max=n ] [ --null ] [ "search string"... ] history delete [ --show-time ] [ --case-sensitive ] [ --exact | --prefix | --contains ] "search string"... history merge history save history clear history ( -h | --help )
Описание
history используется для поиска, удаления и других манипуляций с историей интерактивных команд.
Для обеспечения обратной совместимости каждый подкоманда также может быть указан как длинный параметр. Например, вместо history search можно ввести history --search.
Эти длинные параметры устарели и будут удалены в будущих выпусках.
Доступны следующие операции (подкоманды):
-
searchвозвращает элементы истории, соответствующие строке поиска. Если строка поиска не указана, возвращаются все элементы истории. Это действие по умолчанию, если не указана другая операция. Вы должны явно указатьhistory search, если хотите выполнить поиск по одной из подкоманд. Если вы не укажете другой параметр поиска, будет использован параметр поиска--contains. Элементы упорядочены в обратном хронологическом порядке. Если стандартный вывод подключён к терминалу, вывод будет перенаправлен через ваш просмотрщик страниц функцией history. Функция history просто записывает результаты в стандартный вывод. -
deleteудаляет элементы истории. Без параметров--prefixили--contains, удаляется точное совпадение указанного текста. Если не указан--exact, отобразится приглашение перед удалением любых элементов, спрашивая, какие записи нужно удалить. Можно ввести слово «all», чтобы удалить все соответствующие записи. Можно ввести один идентификатор (число в квадратных скобках), чтобы удалить только эту запись. Можно ввести более одного идентификатора, разделённых пробелом, чтобы удалить несколько записей. Просто нажмите [Enter], чтобы ничего не удалять. Обратите внимание, что интерактивное поведение удаления — это функция history. Встроенная команда history поддерживает только удаление--exact --case-sensitive. -
mergeнемедленно включает изменения в истории из других сессий. Обычноfishигнорирует изменения истории из сессий, начатых после текущей. Эта команда применяет эти изменения немедленно. -
saveнемедленно записывает все изменения в файл истории. Оболочка автоматически сохраняет файл истории; этот параметр предназначен для внутреннего использования и обычно не должен использоваться пользователем. -
clearочищает файл истории. Отображается приглашение перед удалением истории, спрашивая вас о подтверждении, хотите ли вы действительно очистить всю историю, если не использоватьbuiltin history.
Доступны следующие параметры:
Эти флаги могут стоять перед или непосредственно после одной из подкоманд, перечисленных выше.
-
-Cили--case-sensitiveвыполняет поиск с учетом регистра. По умолчанию поиск нечувствителен к регистру. Обратите внимание, что до fish 2.4.0 значение по умолчанию было чувствительным к регистру. -
-cили--containsвыполняет поиск или удаление элементов в истории, содержащих указанную строку текста. Это значение по умолчанию для флага--search. В настоящее время это не поддерживается флагом--delete. -
-eили--exactвыполняет поиск или удаление элементов в истории, которые точно совпадают с указанной строкой текста. Это значение по умолчанию для флага--delete. Обратите внимание, что по умолчанию соответствие нечувствительно к регистру. Если вам действительно нужен точный результат, включая регистр, необходимо использовать флаги-Cили--case-sensitive. -
-pили--prefixвыполняет поиск или удаление элементов в истории, начинающихся с указанной строки текста. В настоящее время это не поддерживается флагом--delete. -
-tили--show-timeдобавляет дату и время записи каждого элемента истории. По умолчанию используется формат strftime# cn. Можно указать другой формат; например, `–show-time='Y-m-d H:M:S 'or–show-time='aIp'. The short option,-tdoesn't accept a stftime format string; it only uses the default format. Any strftime format is allowed, includingsto get the raw UNIX seconds since the epoch. Note that–with-time` также разрешен, но устарел и будет удален в будущей версии. -
-zили--nullзаставляет записи в истории, созданные операциями поиска, завершаться символом NUL, а не символом новой строки. Это позволяет обрабатывать вывод с помощьюread -z, чтобы корректно обрабатывать многострочные записи истории. -
-<number>-n <number>или--max=<number>ограничивает сопоставленные элементы истории первыми "n" соответствующими записями. Это допустимо только дляhistory search. -
-hили--helpотображает справку по этой команде.
Пример
history --clear # Deletes all history items history --search --contains "foo" # Outputs a list of all previous commands containing the string "foo". history --delete --prefix "foo" # Interactively deletes commands which start with "foo" from the history. # You can select more than one entry by entering their IDs seperated by a space. \subsection history-notes Notes If you specify both `--prefix` and `--contains` the last flag seen is used.
Назад к списку команд.
if - условное выполнение команды
Синтаксис
if CONDITION; COMMANDS_TRUE...; [else if CONDITION2; COMMANDS_TRUE2...;] [else; COMMANDS_FALSE...;] end
Описание
if выполнит команду CONDITION. Если код завершения условия равен 0, будут выполнены команды COMMANDS_TRUE. Если код завершения не равен 0 и задан else, будет выполнена COMMANDS_FALSE.
В условии можно использовать and или or. См. второй пример ниже.
Код завершения последней завершенной фоновой команды всегда доступен через переменную $status.
Пример
Следующий код выведет foo.txt exists, если файл foo.txt существует и является обычным файлом, иначе он выведет bar.txt exists, если файл bar.txt существует и является обычным файлом, иначе он выведет foo.txt and bar.txt do not exist.
if test -f foo.txt
echo foo.txt exists
else if test -f bar.txt
echo bar.txt exists
else
echo foo.txt and bar.txt do not exist
end
Следующий код выведет "foo.txt существует и доступен для чтения", если foo.txt является обычным файлом и доступен для чтения
if test -f foo.txt and test -r foo.txt echo "foo.txt exists and is readable" end
Назад к списку команд.
isatty - проверить, является ли дескриптор файла терминалом.
Синтаксис
isatty [FILE DESCRIPTOR]
Описание
isatty проверяет, является ли дескриптор файла терминалом.
FILE DESCRIPTOR может быть либо номером дескриптора файла, либо одной из строк stdin, stdout, или stderr.
Если указанный дескриптор файла является терминалом, код завершения команды равен нулю. В противном случае код завершения не равен нулю. Сообщения в стандартную ошибку не выводятся.
Примеры
В интерактивной оболочке команды ниже завершатся с возвращаемым значением ноль:
isatty isatty stdout isatty 2 echo | isatty 1
И эти завершатся с ненулевым значением:
echo | isatty isatty 9 isatty stdout > file isatty 2 2> file
Назад к списку команд.
jobs - вывести текущие процессы
Синтаксис
jobs [OPTIONS] [PID]
Описание
jobs выводит список текущих задач и их состояние.
jobs принимает следующие переключатели:
-
-cили--commandвыводит имя команды для каждого процесса в задачах. -
-gили--groupвыводит только идентификатор группы каждой задачи. -
-lили--lastвыводит только последнюю запущенную задачу. -
-pили--pidвыводит идентификатор процесса для каждого процесса во всех задачах.
В системах, поддерживающих эту функцию, jobs выведет использование ЦП каждой задачи с момента выполнения последней команды. Использование ЦП выражается в процентах от полной активности ЦП. Обратите внимание, что в многопроцессорных системах общее использование может превышать 100%.
Пример
jobs выводит сводку текущих задач.
Назад к списку команд.
math - Вычисление математических выражений
Синтаксис
math [-sN] EXPRESSION
Описание
math используется для выполнения математических вычислений. Это очень тонкий обертка для программы bc, что позволяет указать выражение из командной строки без использования нестандартных расширений или конвейера.
Описание синтаксиса, поддерживаемого math, можно найти в руководстве программы bc. Имейте в виду, что подстановка параметров выполняется для всех выражений до их вычисления. Это может быть очень полезно для выполнения вычислений, включающих переменные оболочки или вывод замещения команд, но это также означает, что скобки необходимо экранировать.
Доступны следующие опции:
-
-sNУстанавливает разрядность результата.Nдолжна быть целым числом и по умолчанию равна нулю. Это просто устанавливает переменную 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.
Пример
open *.txt открывает все текстовые файлы в текущем каталоге с помощью текстового редактора по умолчанию вашей системы.
Назад к списку команд.
or - условное выполнение команды
Синтаксис
COMMAND1; or COMMAND2
Описание
or используется для выполнения команды, если текущий код завершения (установленный предыдущей командой) не равен 0.
Выражения or могут использоваться в качестве части условия в блоке and или while. См. документацию по if и while для примеров.
or не изменяет текущий код завершения. Код завершения последней завершенной фоновой команды всегда доступен через переменную $status.
Пример
Следующий код выполняет команду make для сборки программы. Если сборка успешна, программа устанавливается. Если любой шаг завершится ошибкой, выполняется make clean, который удаляет файлы, созданные процессом сборки.
make; and make install; or make clean
Назад к списку команд.
popd - переместиться по стеку каталогов
Синтаксис
popd
Описание
popd удаляет верхний каталог из стека каталогов и изменяет текущий каталог на новый верхний каталог. Используйте pushd для добавления каталогов в стек.
Пример
pushd /usr/src # Working directory is now /usr/src # Directory stack contains /usr/src pushd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src /usr/src/fish-shell popd # Working directory is now /usr/src # Directory stack contains /usr/src
Назад к списку команд.
prevd - перейти назад в истории каталогов
Синтаксис
prevd [ -l | --list ] [POS]
Описание
prevd переходит назад на POS позиций в истории посещенных каталогов; если достигнут начальный пункт истории, выводится предупреждение.
Если указан флаг -l или --list, отображается текущая история каталогов.
Обратите внимание, что команда cd ограничивает историю каталогов 25 самыми недавно посещёнными каталогами. История сохраняется в переменных $dirprev и $dirnext, которые эта команда и изменяет.
Пример
cd /usr/src # Working directory is now /usr/src cd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell prevd # Working directory is now /usr/src nextd # Working directory is now /usr/src/fish-shell
Вернуться к списку команд.
printf - вывод текста согласно строке формата
Синтаксис
printf format [argument...]
Описание
printf форматирует строку FORMAT с аргументом ARGUMENT и выводит результат.
Строка FORMAT должна содержать спецификаторы формата, каждый из которых заменяется последовательными аргументами в соответствии со спецификатором. Спецификаторы подробно описаны ниже и взяты из функции библиотеки C printf(3).
В отличие от echo, printf не добавляет новую строку, если это не указано в строке.
Допустимые спецификаторы формата:
-
%d: Аргумент будет использован как десятичное целое число (со знаком или без) -
%i: Аргумент будет использован как целое число со знаком -
%o: Восьмеричное беззнаковое целое число -
%u: Десятичное беззнаковое целое число -
%xили%X: Шестнадцатеричное беззнаковое целое число -
%f,%gили%G: Число с плавающей точкой -
%eили%E: Число с плавающей точкой в научной (XXXeYY) нотации -
%s: Строка -
%b: Как строка, интерпретируя обратные слеши, за исключением того, что восьмеричные обратные слеши имеют вид \0 или \0ooo.
%% обозначает буквальный символ "%".
Обратите внимание, что преобразование может завершиться ошибкой, например, "102.234" не может быть без потерь преобразован в целое число, что заставит printf вывести ошибку.
printf также понимает ряд обратных слешей:
-
\"двойная кавычка -
\\обратный слэш -
\aсигнал (звонок) -
\bвозврат на один символ -
\cбольше не выводить -
\eescape -
\fподача формы -
\nновая строка -
\rвозврат каретки -
\tгоризонтальная табуляция -
\vвертикальная табуляция -
\oooвосьмеричное число (ooo от 1 до 3 цифр) -
\xhhшестнадцатеричное число (hhh от 1 до 2 цифр) -
\uhhhh16-битный символ Unicode (hhhh - 4 цифры) -
\Uhhhhhhhh32-битный символ Unicode (hhhhhhhh - 8 цифр)
Аргумент format повторно используется столько раз, сколько необходимо для преобразования всех предоставленных аргументов. Если спецификатор формата не подходит для данного аргумента, выводится ошибка. Например, `printf 'd' "102.234"` выводит ошибку, так как "102.234" не может быть отформатирован как целое число.
Этот файл был импортирован из printf в GNU Coreutils версии 6.9. Если вы хотите использовать более новую версию printf, например, поставляемую с вашей операционной системой, попробуйте command printf.
Пример
printf '%s\t%s\n' flounder fish
Выведет «flounder fish» (разделенные символом табуляции), за которым следует символ новой строки. Это полезно для написания завершающих символов, так как fish ожидает, что скрипты завершения выведут опцию и описание, разделённые символом табуляции.
printf '%s:%d' "Number of bananas in my pocket" 42
Выведет «Количество бананов в моём кармане: 42», без новой строки.
Вернуться к списку команд.
prompt_pwd - вывести pwd, подходящий для приглашения
Синтаксис
prompt_pwd
Описание
prompt_pwd — это функция для вывода текущего каталога в формате, подходящем для приглашений. Она заменит домашний каталог на "~" и сократит каждый компонент пути, кроме последнего, до значения по умолчанию в один символ.
Для изменения количества символов на каждый компонент пути установите $fish_prompt_pwd_dir_length в нужное значение. Установка значения 0 или недопустимого значения отключит укорочение.
Примеры
> cd ~/ > echo $PWD /home/alfa > prompt_pwd ~ > cd /tmp/banana/sausage/with/mustard > prompt_pwd /t/b/s/w/mustard > set -g fish_prompt_pwd_dir_length 3 > prompt_pwd /tmp/ban/sau/wit/mustard
Вернуться к списку команд.
psub - выполнение подстановки процесса
Синтаксис
COMMAND1 ( COMMAND2 | psub [-f] [-s SUFFIX])
Описание
Позиционные оболочки имеют синтаксис, который представляет собой смесь подстановки команды и конвейерного соединения, называемую подстановкой процесса. Она используется для отправки вывода команды в вызывающую команду, подобно подстановке команды, но с отличием, что вывод не отправляется через аргументы командной строки, а через именованную трубу, а имя именованной трубы передаётся как аргумент вызываемой программе. psub в сочетании с обычной подстановкой команды обеспечивает ту же функциональность.
Если переключатель -f или --file задан для psub, psub будет использовать обычный файл вместо именованной трубы для связи с вызывающим процессом. Это замедлит psub значительно, когда речь идёт о больших объёмах данных, но даёт преимущество, что процесс чтения может искать в потоке.
Если переключатель -s или ---suffix задан, psub добавит SUFFIX к имени файла.
Пример
diff (sort a.txt | psub) (sort b.txt | psub) # shows the difference between the sorted versions of files `a.txt` and `b.txt`. source-highlight -f esc (cpp main.c | psub -s .c) # highlights `main.c` after preprocessing as a C source.
Вернуться к списку команд.
pushd - поместить каталог в стек каталогов
Синтаксис
pushd [DIRECTORY]
Описание
Функция pushd добавляет DIRECTORY в верхнюю часть стека каталогов и делает его текущим каталогом. popd извлечёт его и вернётся в исходный каталог.
Без аргументов она меняет верхние два каталога в стеке.
pushd +NUMBER вращает стек против часовой стрелки, т. е. снизу вверх.
pushd -NUMBER вращает по часовой стрелке, т. е. сверху вниз.
См. также dirs и dirs -c.
Пример
pushd /usr/src # Working directory is now /usr/src # Directory stack contains /usr/src pushd /usr/src/fish-shell # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src /usr/src/fish-shell pushd /tmp/ # Working directory is now /tmp # Directory stack contains /tmp /usr/src /usr/src/fish-shell pushd +1 # Working directory is now /usr/src # Directory stack contains /usr/src /usr/src/fish-shell /tmp popd # Working directory is now /usr/src/fish-shell # Directory stack contains /usr/src/fish-shell /tmp
Вернуться к списку команд.
pwd - вывод текущего каталога
Синтаксис
pwd
Описание
pwd выводит (печатает) текущий рабочий каталог.
Обратите внимание, что fish всегда разрешает символические ссылки в пути текущего каталога.
Вернуться к списку команд.
random - генерировать случайное число
Синтаксис
random [SEED]
Описание
random выводит псевдослучайное число от 0 до 32767 включительно. Даже игнорируя очень узкий диапазон значений, вы не должны предполагать, что это генерирует действительно случайные значения в этом диапазоне. Не используйте это значение для криптографических целей и будьте осторожны при обработке коллизий: одно и то же случайное число может появляться более одного раза в заданном экземпляре fish.
Если предоставлено значение SEED, оно используется для инициализации генератора псевдослучайных чисел, и вывод не будет произведён. Это может быть полезно для отладки, где желательно получить одну и ту же последовательность псевдослучайных чисел несколько раз. Если генератор псевдослучайных чисел вызывается без предварительной инициализации, текущее время будет использоваться в качестве начального значения.
Пример
Следующий код будет отсчитывать от случайного числа до 1:
for i in (seq (random) -1 1)
echo $i
sleep
end
Вернуться к списку команд.
read - читать строку ввода в переменные
Синтаксис
read [OPTIONS] [VARIABLES...]
Описание
read считывает одну строку из стандартного ввода и сохраняет результат в одной или нескольких оболочечных переменных.
Доступны следующие опции:
-
-c CMDили--command=CMDустанавливает начальную строку в буфере команды режима интерактивности вCMD. -
-gили--globalделает переменные глобальными. -
-lили--localделает переменные локальными. -
-m NAMEили--mode-name=NAMEуказывает, что имя NAME должно использоваться для сохранения/загрузки файла истории. Если NAME — fish, то будет доступна обычная история fish. -
-n NCHARSили--nchars=NCHARSзаставляетreadвозвращаться после чтения NCHARS символов, а не ждать всей строки ввода. -
-p PROMPT_CMDили--prompt=PROMPT_CMDиспользует вывод оболочечной командыPROMPT_CMDв качестве приглашения для интерактивного режима. Команда по умолчанию —set_color green; echo read; set_color normal; echo "> ". -
-R RIGHT_PROMPT_CMDили--right-prompt=RIGHT_PROMPT_CMDиспользует вывод оболочечной командыRIGHT_PROMPT_CMDв качестве правого приглашения для интерактивного режима. Нет команды правого приглашения по умолчанию. -
-sили--shellвключает подсветку синтаксиса, автодополнение и завершение команды, подходящие для ввода кода оболочки в интерактивном режиме. -
-uили--unexportпредотвращает экспорт переменных в дочерние процессы (поведение по умолчанию). -
-Uили--universalделает указанную оболочечную переменную универсальной. -
-xили--exportэкспортирует переменные в дочерние процессы. -
-aили--arrayсохраняет результат в виде массива. -
-zили--nullсчитывает до NUL вместо новой строки. Отключает интерактивный режим.
read считывает одну строку ввода из stdin, разбивает её на токены на основе переменной оболочки IFS, а затем присваивает один токен каждой переменной, указанной в VARIABLES. Если токенов больше, чем переменных, весь остаток присваивается последней переменной. В качестве особого случая, если IFS установлена в пустую строку, каждый символ ввода рассматривается как отдельный токен.
Если указаны -a или --array, разрешено только одно имя переменной, и токены сохраняются как массив в этой переменной.
См. документацию по set для получения дополнительной информации о правилах области действия переменных.
Пример
Следующий код сохраняет значение 'hello' в оболочечной переменной $foo.
echo hello|read foo
Вернуться к списку команд.
realpath - Преобразовать путь в абсолютный путь без символических ссылок
Синтаксис
realpath path
Описание
Это реализовано как функция и встроенная команда. Функция попытается использовать внешнюю команду realpath, если она найдена. В противном случае она переходит к встроенной команде. Встроенная команда не поддерживает никаких опций. Она предназначена только для использования скриптами, которые должны быть переносимыми. Встроенная реализация ведет себя как GNU realpath при вызове без опций (что является наиболее распространённым случаем). В общем случае скрипты не должны вызывать встроенную команду напрямую. Они должны использовать realpath.
Если путь недействителен, переведенный путь не будет записан в стандартный вывод, и будет сообщено об ошибке.
Вернуться к списку команд.
return - остановить текущую внутреннюю функцию
Синтаксис
function NAME; [COMMANDS...;] return [STATUS]; [COMMANDS...;] end
Описание
return прерывает текущую выполняющуюся функцию. Код выхода устанавливается в STATUS , если он указан.
Обычно он добавляется внутри условного блока, такого как оператор if или switch, для условного прекращения выполнения функции и возврата вызывающей функции, но его также можно использовать для задания кода выхода функции.
Пример
Следующий код — реализация команды false как функции fish
function false
return 1
end
Вернуться к списку команд.
set - отобразить и изменить переменные оболочки.
Синтаксис
set [SCOPE_OPTIONS] set [OPTIONS] VARIABLE_NAME VALUES... set [OPTIONS] VARIABLE_NAME[INDICES]... VALUES... set ( -q | --query ) [SCOPE_OPTIONS] VARIABLE_NAMES... set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME set ( -e | --erase ) [SCOPE_OPTIONS] VARIABLE_NAME[INDICES]...
Описание
set манипулирует переменными оболочки.
Если set вызывается без аргументов, выводятся имена и значения всех переменных оболочки. Если указаны некоторые флаги области действия или экспорта, выводятся только переменные, соответствующие указанной области действия.
При указании имен и значений переменных set присваивает переменной VARIABLE_NAME значения VALUES....
Следующие параметры контролируют область действия переменной:
-
-lили--localпринудительно задает указанной переменной оболочки область действия, локальную для текущего блока, даже если переменная с данным именем существует и не является локальной -
-gили--globalзадаёт указанной переменной оболочки глобальную область действия. Неглобальные переменные исчезают при завершении блока, к которому они относятся -
-Uили--universalзадает указанной переменной оболочки универсальную область действия. Если этот параметр указан, переменная будет общая для всех текущих экземпляров fish на текущем компьютере и сохранится после перезапуска оболочки. -
-xили--exportэкспортирует указанную переменную оболочки в дочерние процессы (делая её "переменной среды") -
-uили--unexportне экспортирует указанную переменную оболочки в дочерние процессы
Следующие параметры доступны:
-
-eили--eraseудаляет указанную переменную оболочки -
-qили--queryпроверяет, определены ли указанные имена переменных. Ничего не выводит, но код выхода встроенных функций — это количество указанных переменных, которые не были определены. -
-nили--namesВыводит только имена всех определённых переменных, а не их значения -
-Lили--longне сокращает длинные значения при выводе переменных set
Если переменной присвоено более одного значения, переменная будет массивом с указанными элементами. Если переменной присвоено нулевое количество элементов, она станет массивом с нулевыми элементами.
Если имя переменной — это один или несколько элементов массива, например PATH[1 3 7], изменяться будут только указанные элементы массива. При указании индексов массива для set, могут быть использованы несколько аргументов для указания дополнительных индексов, например set PATH[1] PATH[4] /bin /sbin. Если вы указываете отрицательный индекс при расширении или присваивании массиву переменной, индекс будет вычисляться с конца массива. Например, индекс -1 означает последний индекс массива.
Правила области действия при создании или обновлении переменной следующие:
- Если переменная явно задана как универсальная, глобальная или локальная, это значение будет учтено. Если переменная с таким же именем существует в другой области видимости, эта переменная не будет изменена.
- Если переменная явно не задана как универсальная, глобальная или локальная, но была определена ранее, используется предыдущая область видимости переменной.
- Если переменная явно не задана как универсальная, глобальная или локальная и ранее не была определена, переменная будет локальной для выполняемой функции. Обратите внимание, что это отличается от использования флагов
-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устанавливает режим жирного шрифта. -
-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 не поддерживается.
Вернуться к списку команд.
source - выполнить содержимое файла.
Синтаксис
source FILENAME [ARGUMENTS...]
Описание
source оценивает команды из указанного файла в текущей оболочке. Это отличается от запуска нового процесса для выполнения команд (т. е. fish < FILENAME) , так как команды будут оцениваться текущей оболочкой, что означает, что изменения переменных оболочки повлияют на текущую оболочку. Если после имени файла указаны дополнительные аргументы, они будут вставлены в переменную $argv. Переменная $argv не будет включать имя файла, из которого были взяты команды.
Если файл не указан или имя файла '-', будет прочитан стандартный ввод.
Код возврата source — это код возврата последней выполненной задачи. Если возникнет проблема при открытии или чтении файла, source завершит работу с ненулевым кодом возврата.
. (одиночная точка) — псевдоним для команды source. Использование . устарело в пользу source, и . будет удалено в будущих версиях fish.
Пример
source ~/.config/fish/config.fish # Causes fish to re-read its initialization file.
Ограничения
В версиях fish до 2.3.0 переменная $argv содержала бы единственный элемент (имя файла, из которого были взяты команды), если аргументов нет. В противном случае она содержала бы аргументы без имени файла, из которого были взяты команды. Это поведение было очень запутанным и отличалось от поведения других оболочек, таких как bash и zsh.
Назад к списку команд.
status - запрос информации о состоянии выполнения fish
Краткое описание
status [OPTION]
Описание
Без аргументов status отображает сводку текущего состояния входа в систему и управления задачами оболочки.
Доступны следующие опции:
-
-cили--is-command-substitutionвозвращает 0, если fish в данный момент выполняет подстановку команды. -
-bили--is-blockвозвращает 0, если fish в данный момент выполняет блок кода. -
-iили--is-interactiveвозвращает 0, если fish интерактивна — то есть подключена к клавиатуре. -
-lили--is-loginвозвращает 0, если fish — оболочка входа в систему — то есть если fish должна выполнить задачи входа в систему, такие как настройка пути. -
--is-full-job-controlвозвращает 0, если полное управление задачами включено. -
--is-interactive-job-controlвозвращает 0, если интерактивное управление задачами включено. -
--is-no-job-controlвозвращает 0, если управление задачами отключено. -
-fили--current-filenameвыводит имя файла текущего выполняемого скрипта. -
-nили--current-line-numberвыводит номер строки текущего выполняемого скрипта. -
-j CONTROLTYPEили--job-control=CONTROLTYPEустанавливает тип управления задачами, который может бытьnone,full, илиinteractive. -
-tили--print-stack-traceвыводит стек вызовов всех функций в стеке вызовов.
Назад к списку команд.
string - работа со строками
Краткое описание
string length [(-q | --quiet)] [STRING...]
string sub [(-s | --start) START] [(-l | --length) LENGTH] [(-q | --quiet)]
[STRING...]
string split [(-m | --max) MAX] [(-r | --right)] [(-q | --quiet)] SEP
[STRING...]
string join [(-q | --quiet)] SEP [STRING...]
string trim [(-l | --left)] [(-r | --right)] [(-c | --chars CHARS)]
[(-q | --quiet)] [STRING...]
string escape [(-n | --no-quoted)] [STRING...]
string match [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
[(-n | --index)] [(-q | --quiet)] [(-v | --invert)] PATTERN [STRING...]
string replace [(-a | --all)] [(-i | --ignore-case)] [(-r | --regex)]
[(-q | --quiet)] PATTERN REPLACEMENT [STRING...]
Описание
string выполняет операции со строками.
Строковые аргументы берутся из командной строки, если стандартный ввод подключен к конвейеру или файлу, в этом случае они читаются из стандартного ввода, по одной строке на строку. Недопустимо указывать строковые аргументы и в командной строке, и в стандартном вводе.
Аргументы, начинающиеся с -, обычно интерпретируются как переключатели; -- приводит к тому, что следующие аргументы не обрабатываются как переключатели, даже если они начинаются с -. Переключатели и обязательные аргументы распознаются только в командной строке.
Большинство подкоманд принимают переключатель -q или --quiet, который подавляет обычный вывод, но завершает работу с документированным кодом возврата.
В дополнение к кодам возврата, описанным ниже, все подкоманды string завершаются значением 2, чтобы указать, что произошла ошибка.
Доступны следующие подкоманды:
-
lengthсообщает длину каждого строкового аргумента в символах. Код возврата: 0, если хотя бы одна непустая строка была задана, или 1 в противном случае. -
subвыводит подстроку каждого строкового аргумента. Начало подстроки можно указать с помощью-sили--start, за которым следует значение индекса, начинающегося с 1. Положительные значения индекса относятся к началу строки, а отрицательные значения индекса — к концу строки. Значение по умолчанию для начала — 1. Длина подстроки может быть указана с помощью-lили--length. Если длина не указана, подстрока продолжается до конца каждой строки. Код возврата: 0, если хотя бы одна операция с подстрокой была выполнена, 1 в противном случае. -
splitразбивает каждую строку по разделителю SEP, который может быть пустой строкой. Если-mили--maxуказано, то выполняется не более MAX разбиений для каждой строки. Если-rили--rightуказано, разбиение выполняется справа налево. Это полезно в сочетании с-mили--max. Код возврата: 0, если было выполнено хотя бы одно разбиение, или 1 в противном случае. -
joinобъединяет свои строковые аргументы в одну строку, разделенную разделителем SEP, который может быть пустой строкой. Код возврата: 0, если выполнено хотя бы одно объединение, или 1 в противном случае. -
trimудаляет начальные и конечные пробелы из каждой строки. Если-lили--leftзадано, удаляются только начальные пробелы. Если-rили--rightзадано, удаляются только конечные пробелы. Переключатель-cили--charsприводит к удалению символов в CHARS вместо пробелов. Код возврата: 0, если хотя бы один символ был удалён, или 1 в противном случае. -
escapeэкранирует каждую строку таким образом, чтобы её можно было передать обратноeval, чтобы получить исходный аргумент. По умолчанию все специальные символы экранируются, а кавычки используются для упрощения вывода, когда это возможно. Если-nили--no-quotedзаданы, упрощенный формат с кавычками не используется. Код возврата: 0, если хотя бы одна строка была экранирована, или 1 в противном случае. -
matchпроверяет каждую строку на соответствие PATTERN и выводит соответствующие подстроки. Только первое совпадение для каждой строки отображается, если не заданы-aили--all, в этом случае отображаются все совпадения. Сопоставление может быть выполнено без учёта регистра с помощью-iили--ignore-case. Если-nили--indexзадано, каждое совпадение отображается как позиция начала (с 1) и длина. По умолчанию PATTERN интерпретируется как шаблон совпадения glob, применяемый ко всему строковому аргументу. Шаблон glob считается допустимым совпадением только в том случае, если он соответствует всей строке. Если-rили--regexзадано, PATTERN интерпретируется как Perl-совместимый регулярное выражение, которое не обязательно должно соответствовать всей строке. Для регулярного выражения, содержащего группы захвата, для каждого совпадения будет сообщено несколько элементов: один для всего совпадения и один для каждой группы захвата. Если используется —invert или -v, то выбранные строки будут только теми, которые не соответствуют данному шаблону glob или регулярному выражению. Код возврата: 0, если найдено хотя бы одно совпадение, или 1 в противном случае. -
replaceаналогичноmatch, но заменяет неперекрывающиеся совпадающие подстроки строкой замены и выводит результат. По умолчанию PATTERN рассматривается как литеранльная подстрока для сопоставления. Если-rили--regexзадано, PATTERN интерпретируется как Perl-совместимое регулярное выражение, а REPLACEMENT может содержать управляющие последовательности в стиле C, такие как\t, а также ссылки на группы захвата по номеру или имени, такие как$nили${n}. Код возврата: 0, если была выполнена хотя бы одна замена, или 1 в противном случае.
Регулярные выражения
Обе подкоманды match и replace поддерживают регулярные выражения при использовании опции -r или --regex. Диалект — PCRE2.
В целом, специальные символы по умолчанию являются специальными, поэтому a+ соответствует одному или нескольким "a", а a\+ соответствует "a" и затем "+". (a+) соответствует одному или нескольким "a" в группе захвата ((?:XXXX) обозначает незахватывающую группу). Для параметра замены replace, $n относится к n-й группе совпадения. В параметре совпадения \n (например, \1) ссылается на группы.
Примеры
> string length 'hello, world' 12 > set str foo > string length -q $str; echo $status 0 # Equivalent to test -n $str
> string sub --length 2 abcde ab > string sub -s 2 -l 2 abcde bc > string sub --start=-2 abcde de
> string split . example.com example com > string split -r -m1 / /usr/local/bin/fish /usr/local/bin fish > string split '' abc a b c
> seq 3 | string join ... 1...2...3
> string trim ' abc ' abc > string trim --right --chars=yz xyzzy zany x zan
> echo \x07 | string escape \cg
Примеры совпадений Glob
> string match '?' a a > string match 'a*b' axxb axxb > string match -i 'a??B' Axxb Axxb > echo 'ok?' | string match '*\?' >_ ok?
Примеры совпадений Regex
> string match -r 'cat|dog|fish' 'nice dog'
dog
> string match -r -v "c.*[12]" {cat,dog}(seq 1 4)
dog1
dog2
cat3
dog3
cat4
dog4
> string match -r '(\d\d?):(\d\d):(\d\d)' 2:34:56
2:34:56
2
34
56
> string match -r '^(\w{2,4})\g1$' papa mud murmur
papa
pa
murmur
mur
> string match -r -a -n at ratatat
2 2
4 2
6 2
> string match -r -i '0x[0-9a-f]{1,8}' 'int magic = 0xBadC0de;'
0xBadC0de
Примеры замены (литеральный текст)
> string replace is was 'blue is my favorite' blue was my favorite > string replace 3rd last 1st 2nd 3rd 1st 2nd last > string replace -a ' ' _ 'spaces to underscores' spaces_to_underscores
Примеры замены (регулярное выражение)
> string replace -r -a '[^\d.]+' ' ' '0 one two 3.14 four 5x' 0 3.14 5 > string replace -r '(\w+)\s+(\w+)' '$2 $1 $$' 'left right' right left $ > string replace -r '\s*newline\s*' '\n' 'put a newline here' put a here
Назад к списку команд.
suspend - приостановление текущей оболочки
Краткое описание
suspend [--force]
Описание
suspend приостанавливает выполнение текущей оболочки, отправляя ей сигнал SIGTSTP, возвращая управление обратно управляющему процессу. Можно возобновить позже, отправив ей сигнал SIGCONT. Для предотвращения приостановки оболочки, у которой нет управляющего процесса, она не будет приостановлена, если это оболочка входа в систему. Это требование обходится, если задана опция --force или оболочка не интерактивная.
Назад к списку команд.
switch - условное выполнение блока команд
Краткое описание
switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end
Описание
switch выполняет один из нескольких блоков команд в зависимости от того, равно ли заданное значение одному из нескольких значений с подстановкой.
case используется вместе с оператором switch, чтобы определить, какой блок должен быть выполнен.
Каждая команда case получает один или несколько параметров. Первая команда case с параметром, который соответствует строке, указанной в команде switch, будет выполнена. Параметры case могут содержать подстановки. Эти подстановки необходимо экранировать или привести в кавычки, чтобы избежать расширения подстановок по умолчанию с использованием имён файлов.
Обратите внимание, что fish не переходит к следующему случаю в операторе case. Выполняется только первое совпадающее условие.
Обратите внимание, что подстановки команд в операторе case будут вычисляться, даже если его тело не используется. Все подстановки, включая подстановки команд, должны быть выполнены перед тем, как значение можно сравнить с параметром.
Пример
Если переменная $animal содержит название животного, следующий код попытается классифицировать его:
switch $animal
case cat
echo evil
case wolf dog human moose dolphin whale
echo mammal
case duck goose albatross
echo bird
case shark trout stingray
echo fish
case '*'
echo I have no idea what a $animal is
end
Если вышеприведенный код был запущен с $animal установленным в whale, вывод будет mammal.
Назад к списку команд.
test - выполнение тестов файлов и текста
Синтаксис
test [EXPRESSION] [ [EXPRESSION] ]
Описание
Тестирует заданное выражение и устанавливает код завершения в 0, если выражение истинно, и в 1, если ложно. Выражение состоит из одного или нескольких операторов и их аргументов.
Первая форма (test) предпочтительнее. Для совместимости с другими оболочками доступна вторая форма: соответствующая пара квадратных скобок ([ [EXPRESSION ] ]).
Этот тест в основном совместим с POSIX.
Операторы для файлов и каталогов
-
-b FILEвозвращает true, еслиFILEявляется блочным устройством. -
-c FILEвозвращает true, еслиFILEявляется символьным устройством. -
-d FILEвозвращает true, еслиFILEявляется каталогом. -
-e FILEвозвращает true, еслиFILEсуществует. -
-f FILEвозвращает true, еслиFILEявляется обычным файлом. -
-g FILEвозвращает true, если уFILEустановлен бит set-group-ID. -
-G FILEвозвращает true, еслиFILEсуществует и имеет тот же идентификатор группы, что и текущий пользователь. -
-L FILEвозвращает true, еслиFILEявляется символической ссылкой. -
-O FILEвозвращает true, еслиFILEсуществует и принадлежит текущему пользователю. -
-p FILEвозвращает true, еслиFILEявляется именованной трубой. -
-r FILEвозвращает true, еслиFILEпомечен как читаемый. -
-s FILEвозвращает true, если размерFILEбольше нуля. -
-S FILEвозвращает true, еслиFILEявляется сокетом. -
-t FDвозвращает true, если дескриптор файлаFDявляется терминалом (TTY). -
-u FILEвозвращает true, если уFILEустановлен бит set-user-ID. -
-w FILEвозвращает true, еслиFILEпомечен как записываемый; обратите внимание, что это не проверяет, является ли файловая система только для чтения. -
-x FILEвозвращает true, еслиFILEпомечен как исполняемый.
Операторы для текстовых строк
-
STRING1 = STRING2возвращает true, если строкиSTRING1иSTRING2идентичны. -
STRING1 != STRING2возвращает true, если строкиSTRING1иSTRING2не идентичны. -
-n STRINGвозвращает true, если длинаSTRINGне равна нулю. -
-z STRINGвозвращает true, если длинаSTRINGравна нулю.
Операторы для сравнения и проверки чисел
-
NUM1 -eq NUM2возвращает true, еслиNUM1иNUM2численно равны. -
NUM1 -ne NUM2возвращает true, еслиNUM1иNUM2численно не равны. -
NUM1 -gt NUM2возвращает true, еслиNUM1большеNUM2. -
NUM1 -ge NUM2возвращает true, еслиNUM1больше или равноNUM2. -
NUM1 -lt NUM2возвращает true, еслиNUM1меньшеNUM2. -
NUM1 -le NUM2возвращает true, еслиNUM1меньше или равноNUM2.
Обратите внимание, что поддерживаются только целые числа. Для более сложных математических операций, включая дроби, может быть полезной программа env. Обратитесь к документации вашей операционной системы.
Операторы для объединения выражений
-
COND1 -a COND2возвращает true, если обаCOND1иCOND2истинны. -
COND1 -o COND2возвращает true, если либоCOND1илиCOND2истинны.
Выражения можно инвертировать, используя оператор !:
-
! EXPRESSIONвозвращает true, еслиEXPRESSIONложно, и ложно, еслиEXPRESSIONистинно.
Выражения можно группировать, используя скобки.
-
( EXPRESSION )возвращает значениеEXPRESSION.Обратите внимание, что скобки обычно требуют экранирования с помощью
\(для предотвращения их интерпретации как подстановки команды.
Примеры
Если каталог /tmp существует, скопируйте файл /etc/motd в него:
if test -d /tmp
cp /etc/motd /tmp/motd
end
Если переменная MANPATH определена и не пуста, выведите её содержимое. (Если MANPATH не определена, она будет расширена до нулевых аргументов, если не заключена в кавычки.)
if test -n "$MANPATH"
echo $MANPATH
end
Скобки и операторы -o и -a могут быть объединены для создания более сложных выражений. В этом примере успешный вывод отображается, если существуют файлы /foo или /bar, а также /baz или /bat.
if test \( -f /foo -o -f /bar \) -a \( -f /baz -o -f /bat \)
echo Success.
end.
Числовые сравнения просто завершатся неудачей, если один из операндов не является числом:
if test 42 -eq "The answer to life, the universe and everything"
echo So long and thanks for all the fish ## will not be executed
end
Распространённое сравнение — со значением $status:
if test $status -eq 0
echo "Previous command succeeded"
end
Стандарты
test реализует подмножество стандарта IEEE Std 1003.1-2008 (POSIX.1). Следующие исключения применяются:
- Операторы
<и>для сравнения строк не реализованы. -
Так как этот тест является встроенной командой оболочки, а не отдельной утилитой, использование флага -c для специальных дескрипторов файлов, таких как стандартный ввод и вывод, может не давать ожидаемого результата при вызове изнутри канала, в отличие от вызова утилиты
testв другой оболочке.В таких случаях можно использовать
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: максимальный размер создаваемых файлов ядра. Установив это ограничение в ноль, можно отключить дампы ядра. -
-dили--data-size: максимальный размер сегмента данных процесса. -
-fили--file-size: максимальный размер файлов, созданных оболочкой. -
-lили--lock-size: максимальный размер, который может быть заблокирован в памяти. -
-mили--resident-set-size: максимальный размер постоянного набора. -
-nили--file-descriptor-count: максимальное количество открытых дескрипторов файлов (на большинстве систем это значение нельзя установить). -
-sили--stack-size: максимальный размер стека. -
-tили--cpu-time: максимальное время использования процессора в секундах. -
-uили--process-count: максимальное количество процессов, доступных одному пользователю. -
-vили--virtual-memory-sizeМаксимальный объем виртуальной памяти, доступной оболочке.
Обратите внимание, что не все эти ограничения доступны во всех операционных системах.
Значение ограничения может быть числом в указанной для ресурса единице измерения или одним из специальных значений hard, soft, или unlimited, которые обозначают текущее жёсткое ограничение, текущее гибкое ограничение и отсутствие ограничения соответственно.
Если задано ограничение, это новое значение указанного ресурса. Если ни один параметр не указан, предполагается -f. Значения указаны в килобайтах, за исключением -t, которое указано в секундах, и -n, -u, которые являются значениями без масштабирования. Код возврата равен 0, если не указан недопустимый параметр или аргумент, или если при установке нового ограничения произошла ошибка.
ulimit также принимает следующие переключатели, определяющие тип устанавливаемого ограничения:
-
-Hили--hardустанавливает жёсткое ограничение ресурса -
-Sили--softустанавливает гибкое ограничение ресурса
Жёсткое ограничение может быть только уменьшено. После его установки его нельзя увеличить; гибкое ограничение можно увеличить до значения жёсткого ограничения. Если ни -H, ни -S не указаны, при назначении нового значения ограничения обновляются и гибкое, и жёсткое ограничения, а при отображении текущего значения используется гибкое ограничение.
Следующие дополнительные параметры также поддерживаются ulimit:
-
-aили--allвыводит все текущие ограничения
Реализация fish команды ulimit должна вести себя идентично реализации в bash, за исключением этих отличий:
- Fish
ulimitподдерживает длинные опции в стиле GNU для всех переключателей - Fish
ulimitне поддерживает опцию-pдля получения размера канала. Реализация в bash включает проверку на этапе компиляции, которая эмпирически определяет это число, записывая в канал и ожидая SIGPIPE. Fish этого не делает, так как этот метод определения размера канала ненадёжен. В зависимости от версии bash могут быть и другие дополнительные ограничения, которые отсутствуют в fish. - Fish
ulimitне поддерживает получение или установку нескольких ограничений в одной команде, за исключением вывода всех значений с использованием переключателя -a
Пример
ulimit -Hs 64 устанавливает жёсткое ограничение размера стека на 64 КБ.
Возврат к списку команд.
umask - установка или получение маски создания файлов
Синтаксис
umask [OPTIONS] [MASK]
Описание
umask отображает и изменяет "umask", или маску создания файлов, которая используется для ограничения доступа по умолчанию к файлам.
Маска umask может быть выражена либо как восьмеричное число, представляющее права, которые будут удалены по умолчанию, либо символически, представляющее только права, которые будут предоставлены по умолчанию.
Права доступа описаны в справке для программы chmod(1).
Без параметров выводится текущая маска создания файлов в восьмеричном формате.
-
-hили--helpвыводит это сообщение. -
-Sили--symbolicвыводит umask в символической форме вместо восьмеричной. -
-pили--as-commandвыводит umask в форме, которая может быть повторно использована в качестве входных данных
Если в качестве параметра задана числовая маска, текущая маска umask оболочки будет установлена на это значение, и права, указанные этой маской, будут по умолчанию удалены из новых файлов и каталогов.
Если задана символическая маска, следует указывать желаемые биты разрешений, а не их отрицания. Символическая маска — это список прав, разделённых запятыми. Каждое право состоит из трёх частей:
- Первая часть указывает, к кому относится этот набор прав, и может быть одной из
u,g,oилиa, гдеuзадаёт владельца файла,gзадаёт владельца группы файла,oзадаёт права других пользователей, иaзадаёт, что должны быть изменены все три. - Вторая часть права указывает режим и может быть одной из
=,+или-, где=указывает, что права должны быть установлены на новое значение,+указывает, что указанное право должно быть добавлено к тем, что были указаны ранее, и-указывает, что указанные права должны быть удалены из тех, что были указаны ранее. - Третья часть права указывает, какие права должны быть изменены, и может быть любой комбинацией
r,wиx, представляющих чтение, запись и выполнение.
Если первая и вторая части пропущены, они предполагаются a и = соответственно. Например, r,u+w означает, что все пользователи должны иметь право на чтение, а владелец файла также должен иметь право на запись.
Обратите внимание, что символические маски в настоящее время не работают должным образом.
Пример
umask 177 или umask u=rw устанавливает маску создания файлов на чтение и запись для владельца и отсутствие прав для всех других пользователей.
Возврат к списку команд.
vared - интерактивное редактирование значения переменной окружения
Синтаксис
vared VARIABLE_NAME
Описание
vared используется для интерактивного редактирования значения переменной окружения. Массивы переменных целиком редактировать с помощью vared нельзя, но можно редактировать отдельные элементы массива.
Пример
vared PATH[3] редактирует третий элемент массива PATH
Возврат к списку команд.
while - многократное выполнение команды
Синтаксис
while CONDITION; COMMANDS...; end
Описание
while многократно выполняет CONDITION, и если код выхода равен 0, выполняет COMMANDS.
Если код выхода CONDITION не равен 0 в первом цикле, COMMANDS не будет выполняться вообще.
Для сложных условий можно использовать and или or. Ещё более сложный контроль можно реализовать с помощью while true, содержащего break.
Пример
while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end # outputs 'file exists' at 10 second intervals as long as the file foo.txt or bar.txt exists.
Возврат к списку команд.
© 2005–2009 Axel Liljencrantz
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/2.4/commands.html