Spec-Zone.ru › Fish 3.0

Документация

Введение

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

Обзор синтаксиса

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

Команда выполняется путём ввода имени команды, за которым следуют любые аргументы.

Пример:

echo hello world

Это вызывает команду echo. echo — это команда, которая выводит свои аргументы на экран. В приведённом примере выводом будет «hello world». Всё в fish выполняется с помощью команд. Существуют команды для выполнения набора команд многократно, команды для присвоения переменных, команды для обработки группы команд как одной команды и т. д. Причём каждая отдельная команда следует тому же простому синтаксису.

Если вы хотите узнать больше о команде echo, использованной выше, прочитайте страницу руководства для команды echo, набрав: man echo

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

Каждая программа на вашем компьютере может быть использована как команда в fish. Если файл программы расположен в одном из каталогов в PATH, достаточно ввести имя программы, чтобы её использовать. В противном случае необходимо использовать полное имя файла, включая каталог (например, /home/me/code/checkers/checkers или ../checkers).

Вот список некоторых полезных команд:

  • cd, изменить текущий каталог
  • ls, список файлов и каталогов
  • man, отобразить страницу руководства на экране
  • mv, перемещение (переименование) файлов
  • cp, копирование файлов
  • open, открыть файлы с помощью приложения по умолчанию, связанного с типом файла
  • less, вывести содержимое файлов

Команды и параметры разделяются пробелом ' '. Каждая команда завершается либо новой строкой (т. е. нажатием клавиши возврата) или точкой с запятой ';'. Несколько команд можно записать в одной строке, разделяя их точкой с запятой.

Флаг — это очень распространённый специальный тип аргумента. Флаги почти всегда начинаются с одного или нескольких тире '-' и изменяют способ работы команды. Например, команда 'ls' обычно выводит список всех файлов и каталогов в текущем рабочем каталоге, но с использованием флага '-l' поведение 'ls' изменяется так, что отображается не только имя файла, но и размер, права, владелец и время последнего изменения каждого файла.

Флаги различаются между командами и документируются в руководстве по каждой команде. Однако некоторые флаги являются общими для большинства команд, например, '--help' обычно отображает текст справки, '-i' часто включает интерактивные запросы перед выполнением действия, а '-f' отключает их.

Кавычки

Иногда такие функции, как расширение параметров и экранирование символов, мешают. В таких случаях пользователь может записать параметр в кавычки, либо ‘’(single quote) or"(double quote). There is one important difference between single quoted and double quoted strings: When using double quoted string, <a href="#expand-variable">variable expansion</a> still takes place. Other than that, no other kind of expansion (including <a href="#expand-brace">brace expansion</a> and parameter expansion) will take place, the parameter may contain spaces, and escape sequences are ignored. The only backslash escape accepted within single quotes is\', which escapes a single quote and\`, который экранирует символ обратного слэша. Единственные экранирования обратного слэша, поддерживаемые в двойных кавычках, это \", который экранирует двойную кавычку, \$, который экранирует символ доллара, \ за которым следует новая строка, которая удаляет обратный слэш и новую строку, и, наконец, \\, который экранирует символ обратного слэша. В одинарных кавычках нет специального значения, и наоборот.

Пример:

rm "cumbersome filename.txt"

Удалить файл 'cumbersome filename.txt', в то время как

rm cumbersome filename.txt

удалило бы два файла 'cumbersome' и 'filename.txt'.

Экранирование символов

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

  • '\a' представляет собой символ тревоги
  • '\b' представляет собой символ Backspace
  • '\e' представляет собой символ Escape
  • '\f' представляет собой символ Form Feed
  • '\n' представляет собой символ новой строки
  • '\r' представляет собой символ возврата каретки
  • '\t' представляет собой символ табуляции
  • '\v' представляет собой символ вертикальной табуляции
  • '\ ' экранирует пробел
  • '\$' экранирует символ доллара
  • '\\' экранирует символ обратного слэша
  • '\*' экранирует символ звёздочки
  • '\?' экранирует символ вопроса
  • '\~' экранирует символ тильды
  • '\#' экранирует символ решётки
  • '\(' экранирует открывающую скобку
  • '\)' экранирует закрывающую скобку
  • '\{' экранирует открывающую фигурную скобку
  • '\}' экранирует закрывающую фигурную скобку
  • '\[' экранирует открывающую квадратную скобку
  • '\]' экранирует закрывающую квадратную скобку
  • '\<' экранирует символ «меньше чем»
  • '\>' экранирует символ «больше чем»
  • '\^' экранирует символ циркумфлекса
  • '\&' экранирует амперсанд
  • '\|' экранирует вертикальную черту
  • '\;' экранирует точку с запятой
  • '\"' экранирует кавычку
  • '\'' экранирует апостроф
  • '\xxx', где xx — шестнадцатеричное число, представляет символ ASCII с указанным значением. Например, \x9 — символ табуляции.
  • '\Xxx', где xx — шестнадцатеричное число, представляет байт данных с указанным значением. Если вы используете многобайтовую кодировку, это можно использовать для ввода недопустимых строк. Используйте это только в том случае, если вы знаете, что делаете.
  • '\ooo', где ooo — восьмеричное число, представляет символ ASCII с указанным значением. Например, \011 — символ табуляции.
  • '\uxxxx', где xxxx — шестнадцатеричное число, представляет 16-битный символ Unicode с указанным значением. Например, \u9 — символ табуляции.
  • '\Uxxxxxxxx', где xxxxxxxx — шестнадцатеричное число, представляет 32-битный символ Unicode с указанным значением. Например, \U9 — символ табуляции.
  • '\cx', где x — буква алфавита, представляет управляющую последовательность, генерируемую при нажатии клавиши управления и указанной буквы. Например, \ci — символ табуляции

Перенаправление ввода/вывода (IO)

Большинство программ используют три потока ввода/вывода (IO), каждый из которых представлен числом, называемым дескриптором файла (FD). Это:

  • Стандартный ввод, FD 0, для чтения, по умолчанию считывает данные с клавиатуры.
  • Стандартный вывод, FD 1, для записи, по умолчанию записывает данные на экран.
  • Стандартная ошибка, FD 2, для записи ошибок и предупреждений, по умолчанию записывает данные на экран.

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

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

Пример перенаправления файла — echo hello > output.txt, который направляет вывод команды echo в файл output.txt.

  • Чтобы читать стандартный ввод из файла, запишите <SOURCE_FILE
  • Чтобы записывать стандартный вывод в файл, запишите >DESTINATION
  • Чтобы записывать стандартную ошибку в файл, запишите 2>DESTINATION
  • Чтобы добавить стандартный вывод в файл, запишите >>DESTINATION_FILE
  • Чтобы добавить стандартную ошибку в файл, запишите 2>>DESTINATION_FILE
  • Чтобы не перезаписывать существующий файл, запишите '>?DESTINATION' или '2>?DESTINATION'

DESTINATION может быть одним из следующих:

  • Имя файла. Вывод будет записан в указанный файл.
  • Амперсанд (&) за которым следует число другого дескриптора файла. Вывод будет записан в этот дескриптор файла вместо этого.
  • Амперсанд, за которым следует знак минус (&-). Дескриптор файла будет закрыт.

Пример: Чтобы перенаправить как стандартный вывод, так и стандартную ошибку в файл 'all_output.txt', можно записать echo Hello > all_output.txt 2>&1.

Любой дескриптор файла может быть перенаправлен произвольным способом путём добавления префикса номера дескриптора к перенаправлению.

  • Чтобы перенаправить ввод FD N, запишите N<DESTINATION
  • Чтобы перенаправить вывод FD N, запишите N>DESTINATION
  • Чтобы добавить вывод FD N в файл, запишите N>>DESTINATION_FILE

Пример: echo Hello 2>output.stderr записывает стандартную ошибку (дескриптор файла 2) целевой программы в output.stderr.

Каналы

Пользователь может объединить несколько команд в так называемую цепочку команд. Это означает, что стандартный вывод одной команды будет считываться как стандартный ввод следующей команды. Это делается путём разделения команд символом «|». Например

cat foo.txt | head

вызовет программу cat с параметром 'foo.txt', которая выведет содержимое файла 'foo.txt'. Затем содержимое foo.txt будет отфильтровано программой 'head', которая передаст первые десять строк файла на экран. Для получения дополнительной информации о том, как объединять команды через каналы, см. страницы руководства для команд, которые вы хотите использовать, используя команду man . Если вы хотите узнать больше о программе cat, введите man cat.

Каналы обычно соединяют дескриптор файла 1 (стандартный вывод) первого процесса с дескриптором файла 0 (стандартный ввод) второго процесса. Можно использовать другой дескриптор вывода, добавив желаемый номер FD и символ перенаправления вывода в канал. Например:

make fish 2>| less

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

Фоновые задачи

Когда вы запускаете задание в fish, fish само приостановится и передаст управление терминалом только что запущенной программе. Иногда вам нужно продолжить использование командной строки и запустить задание в фоновом режиме. Чтобы создать фоновое задание, добавьте амперсанд (&) к вашей команде. Это сообщит fish о запуске задания в фоновом режиме. Фоновые задания очень полезны при работе с программами, имеющими графический пользовательский интерфейс.

Пример:

emacs &

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

Управление заданиями

Большинство программ позволяют приостановить выполнение программы и вернуть управление fish нажатием Упр-Z (также известное как ^Z). Вернувшись к командной строке fish, вы можете запустить другие программы и сделать всё необходимое. Если вы захотите вернуться к приостановленному заданию, воспользуйтесь командой fg (фоновый режим).

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

Чтобы получить список всех запущенных заданий, используйте команду jobs.

Функции

Функции — это программы, написанные в синтаксисе fish. Они группируют одну или несколько команд и их аргументы под одним именем. Их также можно использовать для запуска определённой команды с дополнительными аргументами.

Например, следующее определение функции вызывает команду ls с аргументом '-l' для вывода подробного списка содержимого текущей директории:

function ll
    ls -l $argv
end

Первая строка сообщает fish о том, что функция с именем ll должна быть определена. Для её использования просто напишите ll в командной строке. Вторая строка сообщает fish, что команда ls -l $argv должна быть вызвана при вызове ll. '$argv' — это переменная массива, которая всегда содержит все аргументы, переданные функции. В приведённом примере они просто передаются команде ls. Для получения дополнительной информации о функциях см. документацию по встроенной команде function.

Определение псевдонимов

Одно из наиболее распространённых применений функций — незначительное изменение поведения уже существующей команды. Например, можно переопределить команду ls для отображения цветов. Переключатель для включения цветов в системах GNU — '--color=auto'. Псевдоним или обёртка вокруг ls может выглядеть так:

function ls
    command ls --color=auto $argv
end

Следует отметить несколько важных моментов относительно псевдонимов:

  • Всегда добавляйте переменную $argv в список параметров оборачиваемой команды. Это гарантирует, что если пользователь указывает дополнительные параметры функции, они передаются основной команде.
  • Если у псевдонима то же имя, что и у алиасируемой команды, необходимо префикс command к вызову программы, чтобы сообщить fish, что функция не должна вызывать сама себя, а скорее команду с тем же именем. Если этого не сделать, возникнут ошибки бесконечной рекурсии.
  • Автозагрузка не применима к псевдонимам. По определению, функция создаётся в момент выполнения команды alias. Вы не можете автозагружать псевдонимы.

Для простого создания функций такого типа можно использовать команду alias.

Автозагрузка функций

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

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

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

  • Директория для конечных пользователей для хранения собственных функций, обычно ~/.config/fish/functions (управление осуществляется переменной среды XDG_CONFIG_HOME).
  • Директория для системных администраторов для установки функций для всех пользователей системы, обычно /etc/fish/functions.
  • Директория для поставщиков стороннего ПО для размещения собственных функций для своего программного обеспечения, обычно /usr/share/fish/vendor_functions.d.
  • Функции, поставляемые с fish, обычно установленные в /usr/share/fish/functions.

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

Этот широкий поиск может быть запутанным. Если вы не уверены, ваши функции, скорее всего, должны находиться в ~/.config/fish/functions.

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

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

Автозагрузка не применима к функциям, созданным командой alias. Для достаточно простых функций, для которых вы предпочитаете использовать команду alias для их определения, вам необходимо поместить эти команды в ваш скрипт ~/.config/fish/config.fish или какой-либо другой скрипт, выполняемый при запуске оболочки.

Если вы разрабатываете другую программу, вы можете установить функции, доступные всем пользователям оболочки fish в системе. Они могут быть установлены в директорию функций «поставщик». Так как этот путь может варьироваться от системы к системе, для определения этого пути с помощью вывода pkg-config --variable functionsdir fish следует использовать фреймворк pkgconfig.

Условное выполнение кода и управление потоком

Существует четыре встроенные команды fish, которые позволяют выполнять команды только при соблюдении определённого условия. Эти встроенные команды — if, switch, and и or.

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

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

Некоторые распространённые слова

Это краткое объяснение некоторых часто используемых слов в fish.

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

Помощь

fish имеет обширную систему помощи. Используйте команду help для получения справки по определённому предмету или команде. Например, написание help syntax отображает раздел синтаксиса этой документации.

fish также имеет man-страницы для своих команд. Например, man set покажет документацию для set в виде man-страницы.

Справку по определённой встроенной команде также можно получить с параметром -h. Например, чтобы получить справку по встроенной команде fg, введите fg -h или help fg.

Автодополнение

fish предлагает команды по мере ввода, основываясь на истории команд, завершении и допустимых путях файлов. По мере ввода команд вы увидите предложенное завершение после курсора в приглушённом сером цвете (который можно изменить переменной fish_color_autosuggestion).

Для принятия автодополнения (заменяющего содержимое командной строки) нажмите правую стрелку или Упр-F. Для принятия первого предложенного слова нажмите Alt-→ или Alt-F. Если автодополнение не то, что вам нужно, просто проигнорируйте его: оно не будет выполнено, пока вы его не примете.

Автодополнение — мощный способ быстро вызвать часто вводимые команды, набрав первые несколько символов. Это также эффективный метод навигации по иерархии директорий.

Автозаполнение табом

Автозаполнение табом — одна из самых экономичных функций любой современной оболочки. Нажав клавишу табуляции, пользователь просит fish угадать оставшуюся часть команды или параметра, который пользователь вводит в данный момент. Если fish может найти только одно возможное завершение, fish выведет его. Если существует более одного завершения, fish выведет наибольший общий префикс всех завершений. Если завершения различаются по первому символу, выводится список всех возможных завершений. Список содержит описания завершений, и если список не помещается на экране, он прокручивается с помощью клавиш со стрелками, клавиш PgUp/PgDn, клавиши табуляции или пробела.

Если список виден, нажатие клавиши Ctrl-S (или привязанной к pager-toggle-search клавиши) позволит отфильтровать список. Нажатие Shift-Tab (или привязанной к complete-and-search клавиши) вызовет завершение с немедленно видимым полем поиска.

Вот общие функции автозавершения, которые предоставляет fish:

  • Автозавершение команд (встроенных, функций и обычных программ).
  • Автозавершение имён переменных оболочки.
  • Автозавершение имён пользователей для тильды.
  • Автозавершение имён файлов, даже для строк с подстановками, таких как '*', '**' и '?'.

fish предоставляет большое количество специфичных для программы автодополнений. Большинство этих автодополнений — это простые варианты, такие как опция -l для ls, но некоторые более продвинутые. К последним относятся:

  • Программы man и whatis показывают все установленные руководства как автодополнения.
  • Программа make использует все цели в файле Makefile в текущем каталоге в качестве автодополнений.
  • Команда mount использует все точки монтирования, указанные в файле fstab, в качестве автодополнений.
  • Команда ssh использует все хосты, хранящиеся в файле known_hosts, в качестве автодополнений. (См. документацию по ssh для получения дополнительной информации)
  • Команда su использует всех пользователей в системе в качестве автодополнений.
  • Команды apt-get, rpm и yum используют все установленные пакеты в качестве автодополнений.

Написание собственных автодополнений

Указание собственных автодополнений несложно. Для задания автодополнения используйте команду complete. Команда complete принимает в качестве параметра имя команды, для которой нужно указать автодополнение. Например, чтобы добавить автодополнение для программы myprog, нужно запустить команду автодополнения с complete -c myprog ...

Для предоставления списка возможных автодополнений для myprog используйте переключатель -a. Если myprog принимает аргументы start и stop, это можно указать как ‘complete -c myprog -a 'start stop’. The argument to the переключатель `-a` всегда представляет собой одну строку. Во время завершения она будет разделяться по пробелам и табуляциям, и будут выполняться подстановка переменных, подстановка команд и другие виды подстановки параметров.

fish имеет специальный синтаксис для поддержки указания переключателей, принимаемых командой. Переключатели -s, -l и -o используются для указания короткого переключателя (символ, например, -l), переключателя в стиле GNU (например, '--color') и переключателя старого стиля (например, '-shuffle'), соответственно. Если команда 'myprog' имеет опцию '-o', которая также может быть написана как '--output', и которая может принимать дополнительное значение 'yes' или 'no', это можно указать, написав:

complete -c myprog -s o -l output -a "yes no"

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

Для примеров написания собственных сложных автодополнений изучите автодополнения в /usr/share/fish/completions. (Точный путь зависит от выбранного префикса установки и может незначительно отличаться).

Полезные функции для написания автодополнений

fish поставляется с несколькими функциями, которые очень полезны при написании автодополнений для конкретных команд. Большинство этих функций начинаются со строки '__fish_'. Такие функции являются внутренними для fish и их имя и интерфейс могут измениться в будущих версиях fish. Тем не менее, некоторые из них могут быть очень полезны при написании автодополнений. Здесь описаны некоторые из этих функций. Имейте в виду, что они могут быть удалены или изменены в будущих версиях.

Функции, начинающиеся со строки __fish_print_, печатают список строк, разделенных новой строкой. Например, __fish_print_filesystems печатает список всех известных файловых систем. Функции, начинающиеся со строки __fish_complete_, выводят список автодополнений с описаниями, разделенных символом табуляции.

  • __fish_complete_directories STRING DESCRIPTION выполняет автодополнение пути STRING, разрешая только каталоги и предоставляя описание DESCRIPTION.
  • __fish_complete_path STRING DESCRIPTION выполняет автодополнение пути STRING, предоставляя описание DESCRIPTION.
  • __fish_complete_groups выводит список всех групп пользователей с членами групп в качестве описания.
  • __fish_complete_pids выводит список всех идентификаторов процессов с именем команды в качестве описания.
  • __fish_complete_suffix SUFFIX выполняет автодополнение файлов, разрешая только файлы, заканчивающиеся на SUFFIX, с необязательным описанием.
  • __fish_complete_users печатает список всех пользователей с их полными именами в качестве описания.
  • __fish_print_filesystems печатает список всех известных файловых систем. В настоящее время это статический список, не зависящий от того, какие файловые системы на самом деле понимает хост-операционная система.
  • __fish_print_hostnames печатает список всех известных хост-имен. Эта функция ищет в файле fstab NFS-серверы, в файле known_hosts - SSH-серверы и проверяет файл /etc/hosts.
  • __fish_print_interfaces печатает список всех известных сетевых интерфейсов.
  • __fish_print_packages печатает список всех установленных пакетов. Эта функция в настоящее время поддерживает пакеты Debian, rpm и Gentoo.

Где разместить автодополнения

Автодополнения можно определять в командной строке или в файле конфигурации, но их также можно загружать автоматически. Fish автоматически ищет любые каталоги в переменной массива $fish_complete_path, и все определенные автодополнения загружаются автоматически по мере необходимости. Файл автодополнений должен иметь имя, состоящее из имени команды для завершения и суффикса '.fish'.

По умолчанию Fish ищет автодополнения в следующих местах, используя первый найденный доступный файл:

  • Каталог для конечных пользователей для хранения собственных автодополнений, обычно ~/.config/fish/completions (управляется переменной среды XDG_CONFIG_HOME);
  • Каталог для системных администраторов для установки автодополнений для всех пользователей в системе, обычно /etc/fish/completions;
  • Каталог для поставщиков программного обеспечения сторонних производителей для распространения собственных автодополнений для своего программного обеспечения, обычно /usr/share/fish/vendor_completions.d;
  • Автодополнения, поставляемые с fish, обычно установлены в /usr/share/fish/completions; и
  • Автодополнения, автоматически сгенерированные из руководств операционной системы, обычно хранятся в ~/.local/share/fish/generated_completions.

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

Этот обширный поиск может быть запутанным. Если вы не уверены, ваши автодополнения, вероятно, должны находиться в ~/.config/fish/completions.

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

Если вы разрабатываете другую программу и хотите распространить автодополнения с вашей программой, установите их в каталог автодополнений "vendor". Поскольку этот путь может отличаться от системы к системе, для обнаружения этого пути с выводом pkg-config --variable completionsdir fish следует использовать структуру pkgconfig.

Подстановка параметров (подстановка шаблонов)

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

Шаблоны

Если в параметре присутствует звёздочка (*) или знак вопроса (?), fish пытается сопоставить заданный параметр с любыми файлами таким образом, что:

  • ? может сопоставляться с любым одиночным символом, кроме '/'.
  • * может сопоставляться с любой строкой символов, не содержащей '/'. Это включает в себя сопоставление пустой строки.
  • ** сопоставляет любую строку символов. Это включает в себя сопоставление пустой строки. Сопоставленная строка может включать символ /; то есть, она рекурсивно входит в подкаталоги. Обратите внимание, что расширение этого шаблона другими строками не будет сопоставлять файлы в текущем рабочем каталоге ($PWD) если вы разделяете строки слэшем ("/"). Это отличается от других оболочек, таких как zsh. Например, **\/*.fish в zsh будет сопоставляться с файлами .fish в PWD, но в fish будет сопоставляться только с такими файлами в подкаталоге. В fish вы должны набрать **.fish чтобы сопоставить файлы и в PWD, и в подкаталогах.

Другие оболочки, такие как zsh, предоставляют богатый синтаксис шаблонов для ограничения файлов, сопоставляемых шаблонами. Например, **(.), чтобы сопоставлять только обычные файлы. Fish предпочитает делегировать такие функции программам, таким как find, а не изобретать велосипед. Таким образом, если вы хотите ограничить подстановку шаблонов только обычными файлами, подход fish заключается в определении и использовании функции. Например,

function ff --description 'Like ** but only returns plain files.'
    # This also ignores .git directories.
    find . \( -name .git -type d -prune \) -o -type f | \ 
        sed -n -e '/^\.\/\.git$/n' -e 's/^\.\///p'
end

Тогда вы можете использовать её вместо ** следующим образом, my_prog (ff), чтобы передать только обычные файлы в или ниже $PWD в my_prog.

Сопоставления по шаблонам сортируются без учёта регистра. При сортировке сопоставлений, содержащих числа, последовательные цифры рассматриваются как один элемент, так что строки '1' '5' и '12' будут отсортированы в указанном порядке.

Имена файлов, начинающиеся с точки, не учитываются при сопоставлении по шаблону, если точка не указана явно как первый символ имени файла.

Примеры:

  • a* сопоставляет любые файлы, начинающиеся с 'a' в текущем каталоге.
  • ??? сопоставляет любой файл в текущем каталоге, имя которого состоит ровно из трёх символов.
  • ** сопоставляет любые файлы и каталоги в текущем каталоге и во всех его подкаталогах.

Обратите внимание, что для большинства команд, если какое-либо сопоставление по шаблону не удаётся расширить, команда не выполняется, $status устанавливается в ненулевое значение, и выводится сообщение об ошибке. Это поведение соответствует установке shopt -s failglob в bash. Есть ровно 3 исключения, а именно set, count и for. Их шаблоны разрешается расширять до нуля аргументов, как и в случае с shopt -s nullglob в bash.

Примеры:

ls *.foo
# Lists the .foo files, or warns if there aren't any.

set foos *.foo
if count $foos >/dev/null
    ls $foos
end
# Lists the .foo files, if any.

Подстановка команд

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

Код возврата последней выполненной подстановки команды доступен в переменной status, если подстановка происходит в контексте команды set.

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

У Fish есть стандартное ограничение в 10 Мбайт на объём данных, которые может вывести подстановка команды. Если предел превышен, вся команда, а не только подстановка, считается неудачной, и $status устанавливается в 122. Вы можете изменить ограничение, установив переменную fish_read_limit в любое время, включая окружение перед запуском fish. Если вы установите её в ноль, ограничение не будет наложено. Это механизм безопасности, который предотвращает чрезмерное потребление памяти оболочкой, если команда выводит необоснованно большое количество данных. Обратите внимание, что это ограничение также влияет на объём данных, который будет обрабатывать команда read.

Примеры:

echo (basename image.jpg .jpg).png
# Outputs 'image.png'.

for i in *.jpg; convert $i (basename $i .jpg).png; end
# Convert all JPEG files in the current directory to the
# PNG format using the 'convert' program.

begin; set -l IFS; set data (cat data.txt); end
# Set the `data` variable to the contents of 'data.txt'
# without splitting it into an array.

Расширение фигурных скобок

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

Примеры:

echo input.{c,h,txt}
# Outputs 'input.c input.h input.txt'

mv *.{c,h} src/
# Moves all files with the suffix '.c' or '.h' to the subdirectory src.

Буквальный "{}" не будет использован как расширение фигурных скобок:

echo foo-{}
# Outputs foo-{}

echo foo-{}$undefinedvar
# Output is an empty line - see the cartesian product section

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

Например:

echo {,,/usr}/bin
# Output /bin /bin /usr/bin

Чтобы использовать "," в качестве элемента, скопируйте или экранируйте его.

Расширение переменных

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

Неопределённые и пустые переменные расширяются до ничего.

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

Примеры:

echo $HOME
# Prints the home directory of the current user.

echo $nonexistentvariable
# Prints no output.

echo The plural of $WORD is "$WORD"s
# Prints "The plural of cat is cats" when $WORD is set to cat.
echo The plural of $WORD is {$WORD}s
# ditto

Обратите внимание, что без кавычек или фигурных скобок fish попытается расширить переменную $WORDs, которая может не существовать.

Последний синтаксис {$WORD} работает, используя расширение фигурных скобок.

В этих случаях расширение устраняет строку в результате неявного декартова произведения.

Если в приведённом выше примере $WORD не определена или является пустым списком, "s" не выводится. Однако он выводится, если $WORD является пустой строкой.

В отличие от всех других расширений, расширение переменных также происходит в строках с двойными кавычками. Внутри двойных кавычек ("these") переменные всегда расширяются ровно до одного аргумента. Если они пустые или неопределённые, результатом будет пустая строка. Если у них один элемент, они расширятся до этого элемента. Если у них больше элементов, элементы будут объединены пробелами.

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

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

Символ $ также может использоваться несколько раз как оператор «развязывания» (аналог * в C или C++), как в следующем коде:

set foo a b c
set a 10; set b 20; set c 30
for i in (seq (count $$foo))
    echo $$foo[$i]
end

# Output is:
# 10
# 20
# 30

При использовании этой функции вместе с квадратными скобками для массивов, скобки всегда соответствуют самому внутреннему $ развязыванию. Таким образом, $$foo[5] всегда означает, что должен быть развязан пятый элемент переменной foo, а не пятый элемент двойной развязанной переменной foo. Последнее можно выразить как $$foo[1][5].

Декартово произведение

Списки, расположенные рядом с другими списками или строками, расширяются как декартовы произведения:

Примеры:

> echo {good,bad}" apples"
good apples bad apples

> set -l a x y z
> set -l b 1 2 3

> echo $a$b
x1 y1 z1 x2 y2 z2 x3 y3 z3

> echo $a"-"$b
x-1 y-1 z-1 x-2 y-2 z-2 x-3 y-3 z-3

> echo {x,y,z}$b
x1 y1 z1 x2 y2 z2 x3 y3 z3

> echo {$b}word
1word 2word 3word

> echo {$c}word
# Output is an empty line

Будьте осторожны, когда пытаетесь использовать фигурные скобки для разделения имён переменных и текста. Проблема, показанная выше, может быть решена путём обертывания переменной в двойные кавычки вместо фигурных скобок (echo "$c"word).

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

Например:

> echo (printf '%s' '')banana ## the printf prints literally nothing
> echo (printf '%s\n' '')banana ## the printf prints just a newline, so the command substitution expands to an empty string
banana
# After command substitution, the previous line looks like:
> echo @dblq{}banana

Примеры:

> set b 1 2 3
> echo (echo x)$b
x1 x2 x3

Расширение диапазона индексов

Как подстановка команд, так и расширение переменных оболочки поддерживают доступ только к определённым элементам путём указания набора индексов в квадратных скобках. Это часто требуется для доступа к последовательности элементов. Для этого используйте оператор диапазона '..' для этого. Диапазон 'a..b', где пределы диапазона 'a' и 'b' — целые числа, расширяется в последовательность индексов 'a a+1 a+2 ... b' или 'a a-1 a-2 ... b' в зависимости от того, какое из 'a' или 'b' больше. Отрицательные пределы диапазона вычисляются с конца массива или подстановки команды. Обратите внимание, что недействительные индексы для обоих концов молча обрезаются до единицы или размера массива, соответственно.

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

Примеры:

# Limit the command substitution output
echo (seq 10)[2..5]
# Uses elements from 2 to 5
# Output is: 2 3 4 5

# Use overlapping ranges:
echo (seq 10)[2..5 1..3]
# Takes elements from 2 to 5 and then elements from 1 to 3
# Output is: 2 3 4 5 1 2 3

# Reverse output
echo (seq 10)[-1..1]
# Uses elements from the last output line to
# the first one in reverse direction
# Output is: 10 9 8 7 6 5 4 3 2 1

# The command substitution has only one line,
# so these will result in empty output:
echo (echo one)[2..-1]
echo (echo one)[-3..1]

То же самое работает при установке или расширении переменных:

# Reverse path variable
set PATH $PATH[-1..1]
# or
set PATH[-1..1] $PATH

# Use only n last items of the PATH
set n -3
echo $PATH[$n..-1]

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

set index 2
set letters a b c d
echo $letters[$index] ## returns <'b'

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

echo (seq 5)[$index] ## This won't work

set sequence (seq 5) ## It needs to be written on two lines like this.
echo $sequence[$index] ## returns <'2'

Расширение домашнего каталога

Символ ~ (тильда) в начале параметра, за которым следует имя пользователя, расширяется до домашнего каталога указанного пользователя. Одиночная ~, или ~ с последующим слэшем, расширяется до домашнего каталога владельца процесса.

Объединение различных расширений

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

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

  • Подстановки команд
  • Расширение переменных
  • Расширение квадратных скобок
  • Расширение подстановок

Расширения выполняются справа налево, вложенные расширения квадратных скобок выполняются изнутри наружу.

Пример:

Если в текущей директории находятся файлы 'foo' и 'bar', команда echo a(ls){1,2,3} выведет 'abar1 abar2 abar3 afoo1 afoo2 afoo3'.

Имена переменных и функций оболочки

Имена, присваиваемые объектам оболочки, таким как переменные и имена функций, известны как «идентификаторы». Каждый тип идентификатора имеет правила, определяющие допустимую последовательность символов, составляющих идентификатор.

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

Имя функции не может быть пустым. Оно не может начинаться с дефиса («-») и не может содержать слэша («/»). Все остальные символы, включая пробел, допустимы.

Имя режима привязки (например, bind -m abc ...) ограничено правилами для допустимых имён переменных.

Переменные оболочки

Переменные оболочки — это именованные данные, которые могут быть созданы, удалены, а их значения изменены и использованы пользователем. Переменные могут быть необязательно «экспортированы», чтобы копия переменной была доступна для любых дочерних процессов, созданных оболочкой. Экспортированная переменная называется «переменной окружения».

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

Пример:

Чтобы установить переменную smurf_color со значением blue, используйте команду set smurf_color blue.

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

Пример:

Чтобы использовать значение переменной smurf_color, напишите $ (символ доллара) за которым следует имя переменной, например echo Smurfs are usually $smurf_color, что выведет результат 'Smurfs are usually blue'.

Область действия переменных

Существует три вида переменных в fish: универсальные, глобальные и локальные. Универсальные переменные разделяются между всеми сеансами fish, которые пользователь запускает на одном компьютере. Глобальные переменные относятся к текущему сеансу fish, но не связаны с какой-либо конкретной областью видимости и никогда не будут удалены, если пользователь явно не запросит это, используя set -e. Локальные переменные относятся к текущему сеансу fish и связаны с конкретным блоком команд и автоматически удаляются, когда конкретный блок выходит из области видимости. Блок команд — это последовательность команд, которая начинается с одной из команд for, while, if, function, begin или switch, и заканчивается командой end. Пользователь может указать, что переменная должна иметь глобальную или локальную область видимости, используя переключатели -g/--global или -l/--local.

Переменные могут быть явно установлены как универсальные с помощью переключателей -U или --universal, глобальные с помощью переключателей -g или --global, или локальные с помощью переключателей -l или --local. Правила области видимости при создании или обновлении переменной следующие:

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

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

Пример:

Следующий код ничего не выведет:

begin
    # This is a nice local scope where all variables will die
    set -l pirate 'There be treasure in them thar hills'
end

echo $pirate
# This will not output anything, since the pirate was local

Дополнительная информация об универсальных переменных

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

Чтобы увидеть универсальные переменные в действии, запустите две сессии fish рядом и выполните следующую команду в одной из них set fish_color_cwd blue. Поскольку fish_color_cwd является универсальной переменной, цвет отображения текущей рабочей директории в приглашении мгновенно изменится на синий в обоих терминалах.

Универсальные переменные хранятся в файле .config/fish/fishd.MACHINE_ID, где MACHINE_ID обычно является вашим MAC-адресом. Не редактируйте этот файл напрямую, так как ваши правки могут быть перезаписаны. Редактируйте их через скрипты fish или используя fish интерактивно.

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

Область действия переменных для функций

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

Например:

function shiver
    set phrase 'Shiver me timbers'
end

function avast
    set phrase 'Avast, mateys'
    # Calling the shiver function here can not
    # change any variables in the local scope
    shiver
    echo $phrase
end
avast

# Outputs "Avast, mateys"

Экспорт переменных

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

Переменные могут быть явно заданы для экспорта с помощью -x или --export флага, или не экспортированы с флагами -u или --unexport. Правила экспорта при создании или обновлении переменной идентичны правилам области видимости для переменных:

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

Массивы

fish могут хранить список из нескольких строк внутри переменной. Чтобы получить доступ к одному элементу массива, используйте индекс элемента в квадратных скобках, как в этом примере:

echo $PATH[3]

Обратите внимание, что индексы массивов начинаются с 1 в fish, а не с 0, как это более распространено в других языках. Это связано с тем, что многие распространённые утилиты Unix, такие как seq, более подходят для такого использования. Неверный индекс игнорируется, в результате чего не подставляется никакого значения (не пустая строка).

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

for i in $PATH; echo $i is in the path; end

Чтобы создать переменную smurf, содержащую элементы blue и small, просто напишите:

set smurf blue small

Также можно устанавливать или удалять отдельные элементы массива:

# Set smurf to be an array with the elements 'blue' and 'small'
set smurf blue small

# Change the second element of smurf to 'evil'
set smurf[2] evil

# Erase the first element
set -e smurf[1]

# Output 'evil'
echo $smurf

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

Можно указать диапазон индексов, см. расширение диапазона индексов для получения более подробной информации.

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

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

set -x smurf blue small
set -x smurf_PATH forest mushroom
env | grep smurf

# smurf=blue small
# smurf_PATH=forest:mushroom

fish автоматически создаёт массивы из всех переменных среды, чьё имя оканчивается на PATH, разделяя их двоеточиями. Другие переменные не разбиваются автоматически.

Переменные PATH

Переменные PATH – это особый тип переменных, используемых для поддержки списков путей, разделённых двоеточиями, включая PATH, CDPATH, MANPATH, PYTHONPATH и т. д. Все переменные, которые оканчиваются на PATH (регистрозависимо), становятся переменными PATH.

Переменные PATH ведут себя как обычные массивы, за исключением того, что они неявно объединяются и разделяются двоеточиями.

set MYPATH 1 2 3
echo "$MYPATH"
# 1:2:3
set MYPATH "$MYPATH:4:5"
echo $MYPATH
# 1 2 3 4 5
echo "$MYPATH"
# 1:2:3:4:5

Переменные могут быть помечены или помечены как переменные PATH с помощью --path и --unpath опций к set.

Специальные переменные

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

  • Большое количество переменных, начинающихся с префиксов fish_color и fish_pager_color.. См. Переменные для изменения цветов выделения для получения более подробной информации.
  • fish_emoji_width управляет вычисляемой шириной определённых символов, в частности эмодзи, чья визуальная ширина варьируется в разных эмуляторах терминала. Это значение следует установить в 1, если ваш эмулятор терминала отображает эмодзи в ширину одного символа, или в 2, если в ширину двух символов. Устанавливайте это только в случае визуальных артефактов при выводе эмодзи.
  • fish_ambiguous_width управляет вычисляемой шириной неоднозначных восточноазиатских символов. Это значение следует установить в 1, если ваш эмулятор терминала отображает эти символы в ширину одного символа (типичный случай), или в 2, если в ширину двух символов.
  • fish_escape_delay_ms переопределяет стандартную задержку в 300 мс (стандартные сочетания клавиш) или 10 мс (сочетания клавиш vi) после получения escape-символа, прежде чем прекратить поиск соответствия сочетания клавиш. См. документацию для встроенной команды bind. Эта задержка позволяет использовать escape-символ как клавишу мета.
  • fish_greeting, сообщение приветствия, выводимое при запуске.
  • fish_history, имя текущей сессии истории. Если задано, все последующие команды в интерактивной сессии fish будут записаны в отдельный файл, идентифицируемый значением переменной. Если не задано или установлено в default, используется имя по умолчанию "fish". Если установлено в пустую строку, история не сохраняется на диск (но остаётся доступной в интерактивной сессии).
  • fish_user_paths, массив каталогов, добавляемых в начало PATH. Это может быть универсальная переменная.
  • umask, текущая маска создания файлов. Предпочтительный способ изменения переменной umask – это встроенная функция umask. Попытка установить umask с недопустимым значением всегда завершится ошибкой.
  • BROWSER, предпочтительный веб-браузер пользователя. Если эта переменная установлена, fish будет использовать указанный браузер вместо системного по умолчанию для отображения документации fish.
  • CDPATH, массив каталогов, в которых нужно искать новый каталог для встроенной команды cd.
  • LANG, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC и LC_TIME устанавливают язык опций для оболочки и подпрограмм. См. раздел Локальные переменные для получения дополнительной информации.
  • PATH, массив каталогов, в которых нужно искать команды

fish также отправляет дополнительную информацию пользователю через значения определённых переменных среды. Пользователь не может изменить значения большинства из этих переменных.

  • _, имя выполняемой в данный момент команды.
  • argv, массив аргументов для оболочки или функции. argv определена только внутри вызова функции или если fish был вызван со списком аргументов, как в fish myscript.fish foo bar. Эта переменная может быть изменена пользователем.
  • history, массив последних введённых команд.
  • HOME, домашний каталог пользователя. Эта переменная может быть изменена пользователем.
  • hostname, имя хоста машины.
  • IFS, внутренний разделитель полей, используемый для разделения слов с помощью встроенной команды read. Установка в пустую строку также отключит разделение строк в подстановке команд. Эта переменная может быть изменена пользователем.
  • PWD, текущая рабочая директория.
  • status, код завершения последней завершившейся фоновой задачи. Если задача завершена по сигналу, код завершения будет равен 128 плюс номер сигнала.
  • USER, текущее имя пользователя. Эта переменная может быть изменена пользователем.
  • CMD_DURATION, время выполнения последней команды в миллисекундах.
  • version, версия текущей fish (также доступна как FISH_VERSION для совместимости с более ранними версиями).
  • SHLVL, уровень вложенности оболочек
  • COLUMNS и LINES, текущий размер терминала по высоте и ширине. Эти значения используются fish только если операционная система не сообщает размер терминала. В этом случае обе переменные должны быть установлены, в противном случае будет использоваться значение по умолчанию 80x24. Они обновляются при изменении размера окна.

Названия этих переменных в основном взяты из семейства оболочек csh и отличаются от используемых в оболочках стиля Bourne, таких как bash.

Переменные с именами в верхнем регистре обычно экспортируются в команды, запущенные fish, а те, что в нижнем регистре, – нет (CMD_DURATION – исключение по историческим причинам). Это правило не навязывается fish, но хорошая практика – использовать регистр для различения экспортированных и неэкспортированных переменных. fish также использует несколько переменных внутри себя. Такие переменные предваряются строками __FISH или __fish.. Пользователю никогда не следует использовать их. Изменение их значений может привести к нарушению работы fish.

Переменная состояния

Когда процесс завершается, состояние завершения возвращается программе, которая его запустила (обычно оболочке). Это состояние завершения – целое число, которое сообщает вызывающему приложению, как прошла работа команды. В общем случае, нулевое состояние завершения означает, что команда выполнилась без проблем, а ненулевое состояние завершения означает наличие проблемы.

Fish сохраняет код завершения последнего завершившегося процесса в переменной status.

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

  • 0 обычно является выходным статусом команд fish, если они успешно выполнили запрошенную операцию.
  • 1 обычно является выходным статусом команд fish, если они не смогли выполнить запрошенную операцию.
  • 121 обычно является выходным статусом команд fish, если им были переданы неверные аргументы.
  • 123 означает, что команда не была выполнена, потому что имя команды содержало недопустимые символы.
  • 124 означает, что команда не была выполнена, потому что ни один из шаблонов подстановки в команде не дал совпадений.
  • 125 означает, что хотя исполняемый файл с указанным именем был найден, операционная система не смогла выполнить команду.
  • 126 означает, что хотя файл с указанным именем был найден, он не был исполняемым.
  • 127 означает, что ни одна функция, встроенная команда или команда с данным именем не были найдены.

Если процесс завершается по сигналу, выходной статус будет 128 плюс номер сигнала.

Переменные для изменения цветов выделения

Цвета, используемые fish для синтаксического выделения, можно настроить, изменив значения различных переменных. Значение этих переменных может быть одним из цветов, принятых командой set_color. Также принимаются переключатели --bold или -b, принятые командой set_color.

Для изменения цветов выделения в fish доступны следующие переменные:

  • fish_color_normal, цвет по умолчанию
  • fish_color_command, цвет для команд
  • fish_color_quote, цвет для заключенных в кавычки блоков текста
  • fish_color_redirection, цвет для перенаправлений ввода-вывода
  • fish_color_end, цвет для разделителей процессов, таких как ';' и '&'
  • fish_color_error, цвет для выделения потенциальных ошибок
  • fish_color_param, цвет для обычных параметров команд
  • fish_color_comment, цвет для комментариев к коду
  • fish_color_match, цвет для выделения пар скобок
  • fish_color_selection, цвет для выделения текста (в режиме визуального редактирования vi)
  • fish_color_search_match, используется для выделения совпадений поиска истории и выбранного элемента (должен быть фоном)
  • fish_color_operator, цвет для операторов расширения параметров, таких как '*' и '~'
  • fish_color_escape, цвет для выделения управляющих последовательностей, таких как '\n' и '\x70'
  • fish_color_cwd, цвет для текущей рабочей директории в стандартном приглашении
  • fish_color_autosuggestion, цвет для автодополнений
  • fish_color_user, цвет для вывода текущего имени пользователя в некоторых стандартных приглашениях fish
  • fish_color_host, цвет для вывода текущей хост-системы в некоторых стандартных приглашениях fish
  • fish_color_cancel, цвет для индикатора '^C' при отмене команды

Кроме того, для изменения выделения в пэйджере автодополнений доступны следующие переменные:

  • fish_pager_color_prefix, цвет префикса, то есть строки, которая должна быть дополнена
  • fish_pager_color_completion, цвет автодополнения
  • fish_pager_color_description, цвет описания автодополнения
  • fish_pager_color_progress, цвет полосы прогресса в нижнем левом углу
  • fish_pager_color_secondary, цвет фона каждой второй строки автодополнения

Пример:

Чтобы сделать ошибки выделенными красным цветом, используйте:

set fish_color_error red --bold

Локальные переменные

Самый распространенный способ установки локали — использование команды 'set -x LANG en_GB.utf8', которая устанавливает текущей локалью английский язык, используемый в Великобритании, с использованием набора символов UTF-8. Для получения списка доступных локалей используйте 'locale -a'.

LANG, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC и LC_TIME устанавливают языковой параметр для оболочки и подпрограмм. Эти переменные работают следующим образом: LC_ALL принудительно устанавливает все аспекты локали в указанное значение. Если LC_ALL установлено, все остальные локальные переменные будут игнорироваться. Другие переменные LC_ устанавливают указанный аспект информации о локали. LANG — это значение по умолчанию, оно будет использоваться, если ни одна из переменных LC_ не указана.

Встроенные команды

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

Для получения списка всех встроенных команд, функций и команд, поставляемых с fish, см. таблицу содержания. Документация также доступна с помощью переключателя --help команды.

Редактор командной строки

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

Аналогично bash, fish имеет режимы редактирования Emacs и Vi. Режим редактирования по умолчанию — Emacs. Вы можете переключиться на режим Vi с помощью fish_vi_key_bindings и вернуться обратно с помощью fish_default_key_bindings. Вы также можете создать свои собственные сочетания клавиш, создав функцию и установив $fish_key_bindings в её имя. Например:

function hybrid_bindings --description "Vi-style bindings that inherit emacs-style bindings in all modes"
    for mode in default insert visual
        fish_default_key_bindings -M $mode
    end
    fish_vi_key_bindings --no-erase
end
set -g fish_key_bindings hybrid_bindings

Общие сочетания

Некоторые сочетания общие для режимов emacs и vi, потому что они не являются сочетаниями для редактирования текста или потому что то, что делает Vi/Vim для определённой клавиши, не имеет смысла для оболочки.

  • Tab завершает текущий токен. Shift- Tab завершает текущий токен и запускает режим поиска пэйджера.
  • Alt-← и Alt-→ перемещают курсор на одно слово влево или вправо, или перемещают вперёд/назад по истории каталогов, если командная строка пустая. Если курсор уже находится в конце строки, и доступно автодополнение, Alt-→ (или Alt-F) принимает первое слово из предложения.
  • ↑ и ↓ (или Control-P и Control-N для любителей emacs) ищут в истории команд предыдущую/следующую команду, содержащую строку, указанную в командной строке до начала поиска. Если командная строка была пустой, когда поиск начался, все команды совпадают. См. раздел история для получения дополнительной информации о поиске в истории.
  • Alt-↑ и Alt-↓ ищут в истории команд предыдущий/следующий токен, содержащий токен под курсором до начала поиска. Если командная строка не находилась на токене, когда поиск начался, все токены совпадают. См. раздел история для получения дополнительной информации о поиске в истории.
  • Control-C отменяет всю строку.
  • Control-D удаляет один символ справа от курсора. Если командная строка пустая, Control-D завершит работу fish.
  • Control-U перемещает содержимое от начала строки до курсора в буфер обмена.
  • Control-L очищает и перерисовывает экран.
  • Control-W перемещает предыдущий компонент пути (все до предыдущего "/") в буфер обмена.
  • Control-X копирует текущий буфер в буфер обмена системы, Control-V вставляет содержимое буфера обмена.
  • Alt-d перемещает следующее слово в буфер обмена.
  • Alt-h (или F1) отображает страницу руководства для текущей команды, если она существует.
  • Alt-l отображает содержимое текущей директории, если курсор не находится над аргументом, являющимся директорией, в противном случае отображается содержимое этой директории.
  • Alt-p добавляет строку '| less;' в конец задачи под курсором. Результатом является то, что вывод команды будет выводиться по страницам.
  • Alt-w выводит краткое описание команды под курсором.
  • Alt-e редактирует текущую командную строку в внешнем редакторе. Редактор выбирается из первого доступного в переменных $VISUAL или $EDITOR.
  • Alt-v То же, что и Alt-e.

Команды режима Emacs

  • Home или Control-A перемещает курсор в начало строки.
  • End или Control-E перемещает в конец строки. Если курсор уже находится в конце строки, и доступно автодополнение, End или Control-E принимает автодополнение.
  • ← (или Control-B) и → (или Control-F) перемещают курсор влево или вправо на один символ. Если курсор уже находится в конце строки, и доступно автодополнение, клавиша → и сочетание Control-F принимают предложение.
  • Delete и Backspace удаляют один символ вперёд или назад соответственно.
  • Control-K перемещает содержимое от курсора до конца строки в буфер обмена.
  • Alt-c делает текущее слово заглавным.
  • Alt-u делает текущее слово заглавным.
  • Control-t меняет местами последние два символа
  • Alt-t меняет местами последние два слова

Вы можете изменить эти сочетания клавиш с помощью встроенной команды bind.

Команды режима Vi

Режим Vi позволяет использовать команды Vi-подобного вида в командной строке. Изначально активен режим вставки. Escape переводит в режим команд. Команды, доступные в режимах команд, вставки и визуального режима, описаны ниже. Режим Vi использует некоторые комбинации клавиш, общие с режимом Emacs.

Также возможно добавить все комбинации клавиш из режима emacs-mode в vi-mode, используя что-то вроде

function fish_user_key_bindings
    # Execute this once per mode that emacs bindings should be used in
    fish_default_key_bindings -M insert
    # Without an argument, fish_vi_key_bindings will default to
    # resetting all bindings.
    # The argument specifies the initial mode (insert, "default" or visual).
    fish_vi_key_bindings insert
end

При работе в режиме vi функция fish_mode_prompt отобразит индикатор режима слева от командной строки. Функция fish_vi_cursor будет использоваться для изменения формы курсора в зависимости от режима в поддерживаемых терминалах. Чтобы отключить эту функцию, переопределите её пустой функцией. Чтобы отобразить режим в другом месте (например, в правой части командной строки), используйте результат работы функции fish_default_mode_prompt.

Режим команд

Режим команд также известен как нормальный режим.

  • h перемещает курсор влево.
  • l перемещает курсор вправо.
  • i переходит в режим вставки в текущей позиции курсора.
  • v переходит в режим визуального выбора в текущей позиции курсора.
  • a переходит в режим вставки после текущей позиции курсора.
  • Shift-A переходит в режим вставки в конце строки.
  • 0 (ноль) перемещает курсор в начало строки (оставаясь в режиме команд).
  • dd удаляет текущую строку и помещает её в буфер обмена.
  • Shift-D удаляет текст после текущей позиции курсора и помещает его в буфер обмена.
  • p вставляет текст из буфера обмена.
  • u просмотр истории команд в обратном порядке.
  • [ и ] поиск в истории команд по предыдущему/следующему элементу, содержащему текущий элемент до начала поиска. См. раздел истории для получения дополнительной информации о поиске в истории.
  • Backspace перемещает курсор влево.

Режим вставки

  • Escape переходит в режим команд.
  • Backspace удаляет один символ слева.

Режим визуального выбора

  • ← и → расширяют выбор влево/вправо на один символ.
  • b и w расширяют выбор влево/вправо на одно слово.
  • d и x перемещают выделение в буфер обмена и переходят в режим команд.
  • Escape и Control-C переходят в режим команд.

Копирование и вставка (Буфер обмена)

fish использует буфер обмена в стиле Emacs для копирования и вставки. Используйте Control-K для вырезания текста от текущей позиции курсора до конца строки. Вырезанная строка (также известная как убитая строка) вставляется в связанный список вырезок, называемый буфером обмена. Для вставки последнего значения из буфера обмена используйте Control-Y. После вставки используйте Alt-Y для перехода к предыдущей вырезке.

Поддерживается копирование и вставка извне, как через комбинации Control-X / Control-V, так и через функцию вставки терминала, для которой fish включает "режим вставки с квадратными скобками". При вставке внутри одинарных кавычек вставленные одинарные кавычки и обратные слэши автоматически экранируются, чтобы результат можно было использовать как один токен, просто закрыв кавычку после.

Поиск в истории

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

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

Поиск в истории можно прервать, нажав клавишу Escape.

Представление командной строки с пробела предотвратит сохранение всей строки в истории.

История команд по умолчанию сохраняется в файле ~/.local/share/fish/fish_history (или $XDG_DATA_HOME/fish/fish_history, если эта переменная установлена). Однако вы можете установить переменную среды fish_history, чтобы изменить имя сессии истории (что приведёт к файлу <session>_history); как до запуска оболочки, так и во время работы оболочки.

Примеры:

Чтобы найти предыдущие записи, содержащие слово «make», введите make в консоли и нажмите клавишу вверх.

Если в командной строке стоит cd m, установите курсор на символе m и нажмите Alt-↑, чтобы найти ранее введённые слова, содержащие «m».

Редактирование многострочных команд

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

  • Нажатие клавиши Enter при неполном блоке команд, например, если одна или несколько командных блоков, таких как for, begin или if, не имеют соответствующей команды end.
  • Нажатие Alt-Enter вместо Enter.
  • Вставка символа обратного слэша (\) перед нажатием клавиши Enter, экранируя перевод строки.

Редактор командной строки fish работает одинаково в однострочном и многострочном режимах. Для перемещения между строками используйте клавиши со стрелками и другие аналогичные сочетания клавиш.

Запуск нескольких программ

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

  1. Завершая команду символом & (амперсанд), пользователь сообщает fish, что указанная команда должна быть запущена в фоновом режиме. Программа в фоновом режиме будет работать одновременно с fish. fish сохранит управление терминалом, поэтому программа не сможет читать данные с клавиатуры.
  2. Нажав Control-Z, пользователь останавливает выполняющуюся в фоновом режиме программу и возвращает управление fish. Некоторые программы не поддерживают эту функцию или переопределяют её на другую клавишу. В GNU Emacs используется Control-X z для остановки.
  3. Используя встроенные команды fg и bg, пользователь может переместить любую работающую программу в фоновый или передний режим.

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

Файлы инициализации

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

Файлы конфигурации обрабатываются в следующем порядке:

  • Файлы конфигурации, поставляемые с fish, которые не должны редактироваться, в $__fish_data_dir/config.fish (обычно /usr/share/fish/config.fish).
  • Файлы конфигурации системы, где администраторы могут включать инициализацию, которая должна выполняться для всех пользователей системы — аналогично /etc/profile для оболочек в стиле POSIX — в $__fish_sysconf_dir (обычно /etc/fish/config.fish);
  • Фрагменты конфигурации в файлах, оканчивающихся на .fish, в директориях:

    • $__fish_config_dir/conf.d (по умолчанию, ~/.config/fish/conf.d/)
    • $__fish_sysconf_dir/conf.d (по умолчанию, /etc/fish/conf.d)
    • /usr/share/fish/vendor_conf.d (устанавливается во время компиляции; по умолчанию, $__fish_data_dir/conf.d)

    Если в этих директориях существует несколько файлов с одинаковым именем, будет выполнен только первый. Они выполняются в порядке их имени файла, отсортированные (как в шаблонах) в естественном порядке (т. е. "01" сортируется перед "2").

  • Инициализация пользователя, обычно в ~/.config/fish/config.fish (управляется переменной окружения XDG_CONFIG_HOME, и доступна как $__fish_config_dir).

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

Этот широкий поиск может быть запутанным. Если вы не уверены, куда поместить свои собственные настройки, используйте ~/.config/fish/config.fish.

Обратите внимание, что ~/.config/fish/config.fish подключается *после* фрагментов. Это делается для того, чтобы пользователи могли копировать фрагменты и переопределять некоторые из их свойств.

Все эти файлы выполняются при запуске каждой оболочки. Если вы хотите выполнить команду только при запуске интерактивной оболочки, используйте код возврата команды status --is-interactive для определения, является ли оболочка интерактивной. Если вы хотите выполнить команду только при использовании оболочки входа, используйте status --is-login вместо этого. Это ускорит запуск неинтерактивных или нелоиновых оболочек.

Если вы разрабатываете другую программу, вам, возможно, захочется установить конфигурацию, которая будет выполняться для всех пользователей оболочки fish на системе. Это не рекомендуется; если она не написана тщательно, у неё могут быть побочные эффекты или замедлить запуск оболочки. Кроме того, пользователи других оболочек не получат выгоды от специфичной для Fish конфигурации. Однако, если они абсолютно необходимы, вы можете установить их в директорию конфигурации «vendor». Поскольку этот путь может отличаться от системы к системе, для определения этого пути с выводом pkg-config --variable confdir fish следует использовать фреймворк pkgconfig.

Примеры:

Если вы хотите добавить директорию ~/linux/bin в переменную PATH при использовании оболочки входа, добавьте следующее в свой файл ~/.config/fish/config.fish:

if status --is-login
    set -x PATH $PATH ~/linux/bin
end

Если вы хотите выполнить набор команд, когда fish завершает работу, используйте обработчик событий обработчик событий, который запускается при завершении работы оболочки:

function on_exit --on-event fish_exit
    echo fish is now exiting
end

Флаги будущих функций

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

Текущий список функций можно увидеть с помощью status features:

> status features
stderr-nocaret  on     3.0      ^ no longer redirects stderr
qmark-noglob    off    3.0      ? no longer globs

В fish 3.0 есть два изменения, ломающих скрипты: символ ^^ больше не перенаправляет stderr, и символ вопросительного знака ? больше не является шаблоном. Эти изменения отключены по умолчанию. Их можно включить на основе текущей сессии:

> fish --features qmark-noglob,stderr-nocaret

или включить их глобально для пользователя:

> set -U fish_features stderr-nocaret qmark-noglob

Другие функции

Синтаксическая подсветка

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

Обнаруженные ошибки включают:

  • Несуществующие команды.
  • Чтение из или добавление в несуществующий файл.
  • Неправильное использование перенаправления вывода.
  • Несоответствующие скобки.

Когда курсор находится над скобкой или кавычкой, fish также подсвечивает соответствующую кавычку или скобку.

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

Программируемый заголовок

При использовании большинства виртуальных терминалов можно установить сообщение, отображаемое в строке заголовка окна терминала. Это можно сделать автоматически в fish, определив функцию fish_title. Функция fish_title выполняется до и после выполнения новой команды или перевода её в фоновый режим, а вывод используется в качестве сообщения строки заголовка. Встроенная функция status current-command всегда возвращает имя задания, которое нужно перевести в фоновый режим (или 'fish', если управление возвращается к оболочке), когда вызывается функция fish_prompt. Первый аргумент функции fish_title будет содержать самую последнюю выполненную команду в фоновом режиме как строку, начиная с fish 2.2.

Примеры: Значение заголовка fish по умолчанию

function fish_title
    echo (status current-command) ' '
    pwd
end

Чтобы отобразить последнюю команду в заголовке:

function fish_title
    echo $argv[1]
end

Программируемая подсказка

Когда fish ожидает ввода, он отобразит подсказку, оценив функции fish_prompt и fish_right_prompt. Вывод первого отображается слева, а вывод второго — справа от терминала. Вывод fish_mode_prompt будет добавлен слева, хотя по умолчанию эта функция делает это только в режиме vi-режима.

Настраиваемое приветствие

Если существует функция с именем fish_greeting, она будет выполнена при входе в интерактивный режим. В противном случае, если существует переменная окружения с именем fish_greeting, она будет выведена.

Режим конфиденциальности

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

Обработчики событий

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

  • При получении сигнала
  • При завершении работы процесса или задания
  • При обновлении значения переменной
  • При отображении подсказки
  • При неудачном поиске команды

Пример:

Чтобы указать обработчик сигналов для сигнала WINCH, напишите:

function my_signal_handler --on-signal WINCH
    echo Got WINCH signal!
end

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

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

Отладка скриптов fish

Fish включает встроенную отладочную утилиту. Отладчик позволяет останавливать выполнение скрипта в произвольной точке. В этом случае вам будет представлена интерактивная подсказка. На этой подсказке вы можете выполнить любую команду fish (нет никаких команд отладки как таковых). Например, вы можете проверить или изменить значение любой переменной с помощью printf и set. В качестве другого примера, вы можете запустить status print-stack-trace для того, чтобы увидеть, как был достигнут этот контрольный пункт. Чтобы продолжить обычное выполнение скрипта, просто введите exit или [ctrl-D].

Чтобы начать сеанс отладки, просто выполните встроенную команду breakpoint в той точке функции или скрипта, где вы хотите получить контроль. Кроме того, стандартное действие сигнала TRAP — вызов этой встроенной команды. Таким образом, запущенный скрипт может быть отлажен путём отправки ему сигнала TRAP с помощью команды kill. После входа в отладчик легко вставить новые контрольные точки с помощью функции funced для изменения определения функции.

Примечание: В настоящее время подсказка отладки идентична вашей обычной подсказке fish. Это может затруднить распознавание того, что вы вошли в сеанс отладки. Выпущена задача 1310 для улучшения этого.

Дополнительная помощь и разработка

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

  1. Официальный список рассылки по адресу fish-users@lists.sourceforge.net
  2. Канал IRC, #fish на irc.oftc.net
  3. Страница проекта GitHub по адресу https://github.com/fish-shell/fish-shell/

Если у вас есть улучшение для fish, вы можете отправить его по почте или через страницу GitHub.

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

Spec-Zone.ru

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