Spec-Zone.ru › Fish 3.3

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

Описание

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

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

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

  • fish_prompt, которое генерируется всякий раз, когда отображается новое приглашение fish.
  • fish_preexec, которое генерируется непосредственно перед выполнением интерактивной команды. Командная строка передаётся в качестве первого параметра. Не генерируется, если команда пустая.
  • fish_posterror, которое генерируется непосредственно после выполнения команды с синтаксическими ошибками. Командная строка передаётся в качестве первого параметра.
  • fish_postexec, которое генерируется непосредственно после выполнения интерактивной команды. Командная строка передаётся в качестве первого параметра. Не генерируется, если команда пустая.
  • fish_exit генерируется непосредственно перед завершением fish.
  • fish_cancel, которое генерируется при очистке командной строки (используется для интеграции терминал-оболочки).

Пример

function ll
    ls -l $argv
end

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

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

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

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

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

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

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

Примечания

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

См. также

Для более подробного объяснения того, как функции вписываются в fish, см. Функции.

© 2021 fish-shell developers
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.3/cmds/function.html

Spec-Zone.ru

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