Spec-Zone.ru › Fish 3.2

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

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

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. Вместо 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 в другой.

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

Spec-Zone.ru

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