ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Суббота, 25 января, 2025

Как управлять командой functions в оболочке Fish в Linux

Как управлять командой функциями functions в оболочке Fish в Linux

Команда functions в оболочке Fish используется для управления функциями Fish и взаимодействия с ними. Она позволяет просматривать, редактировать, удалять и даже сохранять функции. В этой статье мы узнаем, как управлять функциями в оболочке Fish на примере Linux.

 

Что это за команда functions?

В оболочке Fish команда functions — это блоки многократно используемого кода, которые вы можете определять и вызывать по имени. Команда functions — это встроенная утилита, которая помогает управлять этими функциями. Вы можете использовать её для:

 

Когда и зачем использовать команду functions?

 

Управление функциями в оболочке Fish

1. Определите (Создайте) новую функцию

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

Ключевое различие между определением функции в ~/.config/fish/config.fish и её сохранением в ~/.config/fish/functions/ заключается в том, как Fish обрабатывает загрузку и выполнение функций.

 

 

1.1. Определение функции в config.fish

Когда вы добавляете функцию непосредственно внутрь ~/.config/fish/config.fish, она запускается каждый раз, когда запускается новая оболочка Fish.

Пример:

function cdls
    # Перейдите в указанный каталог
    builtin cd $argv[1]
    and begin
        # Вывод содержимого каталога с тайм-аутом в 1 секунду
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

 

Плюсы:

 

Минусы:

 

1.2. Функция сохранения в пользовательском каталоге

Когда вы используете funcsave function_name или вручную создаёте файл в ~/.config/fish/functions/, Fish автоматически загружает функцию при необходимости.

Сначала создайте функцию в вашем текущем сеансе Fish:

function cdls
    # Перейдите в указанный каталог
    builtin cd $argv[1]
    and begin
        # Вывод содержимого каталога с тайм-аутом в 1 секунду
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

 

На этом этапе функция будет работать в вашем сеансе, но исчезнет при перезапуске Fish.

Чтобы сохранить определенную функцию навсегда, мы можем использовать команду funcsave.

funcsave cdls

 

Это сохраняет cdls в ~/.config/fish/functions/cdls.fish, содержащий:

function cdls
    # Перейдите в указанный каталог
    builtin cd $argv[1]
    and begin
        # Вывод содержимого каталога с тайм-аутом в 1 секунду
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

 

Плюсы:

 

Минусы:

 

Лучшая практика?

 

2. Перечислите все функции

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

functions

 

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

 

Пример вывода:

N_, abbr, alias, bg, cd, cdh, cdls, contains_seq, delete-or-exit, diff, dirh,
dirs, disown, down-or-search, edit_command_buffer, export, fg, fish_add_path,
fish_breakpoint_prompt, fish_clipboard_copy, fish_clipboard_paste,
fish_command_not_found, fish_commandline_append, fish_commandline_prepend,
fish_config, fish_default_key_bindings, fish_default_mode_prompt,
fish_git_prompt, fish_greeting, fish_hg_prompt, fish_hybrid_key_bindings,
fish_indent, fish_is_root_user, fish_job_summary, fish_key_reader,
fish_mode_prompt, fish_opt, fish_print_git_action, fish_print_hg_root,
fish_prompt, fish_sigtrap_handler, fish_status_to_signal, fish_svn_prompt,
fish_title, fish_update_completions, fish_vcs_prompt, fish_vi_cursor,
fish_vi_key_bindings, funced, funcsave, grep, help, history, isatty, kill, la,
ll, ls, man, nextd, nextd-or-forward-word, open, popd, prevd,
prevd-or-backward-word, prompt_hostname, prompt_login, prompt_pwd, psub, pushd,
realpath, seq, setenv, suspend, trap, umask, up-or-search, vared, wait

 

Функции Вывода команд в оболочке Fish

3. Просмотрите код функции

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

functions <function_name>

 

Например, чтобы увидеть код для функции cdls:

functions cdls

 

При этом будет выведено полное определение функции cd .

function cdls
    # Перейдите в указанный каталог
    builtin cd $argv[1]
    and begin
        # Вывод содержимого каталога с тайм-аутом в 1 секунду
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

 

4. Отредактируйте функцию

Вы можете отредактировать функцию непосредственно в текстовом редакторе по умолчанию, используя:

funced <function_name>

 

Например, для редактирования функции cd:

funced cdls

 

Это откроет функцию в вашем редакторе (например, nano или vim), и вы сможете её изменить. После сохранения и выхода изменения вступят в силу немедленно.

 

5. Сохраните функцию в файл.

Это ТО ЖЕ самое, что создавать новые функции с помощью команды funcsave.

Сначала определите функцию в текущем сеансе.

Если вы хотите сохранить определение функции в файле, используйте:

functions <function_name> > filename.fish

 

Например, чтобы сохранить cdls функцию в файл:

functions cdls > ~/.config/fish/functions/cdls.fish

 

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

 

6. Скопируйте функцию

Вы можете скопировать существующую функцию под новым именем, используя -c или --copy:

functions --copy <old_function_name> <new_function_name>

 

Например, чтобы скопировать cd функцию в новую функцию, вызываемую mycd:

functions --copy cd mycd

 

Теперь вы можете изменять mycd, не затрагивая исходную cd функцию.

 

7. Стереть (Delete) функцию

Чтобы удалить функцию из текущего сеанса, используйте флаг -e или --erase:

functions --erase <function_name>

 

Например, чтобы удалить пользовательскую функцию cdls:

functions --erase cdls

 

Это удаляет cdls, но не влияет на постоянные функции, сохранённые в config.fish или в каталоге ~/.config/fish/functions/.

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

После удаления функции перезагрузите fish, чтобы применить изменения:

exec fish

 

Или перезагрузите свой терминал.

Если вы сохранили функцию с помощью funcsave или создали её вручную, Fish сохранит её в ~/.config/fish/functions/.

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

rm ~/.config/fish/functions/function_name.fish

 

Пример:

rm ~/.config/fish/функции/cdls.fish

 

А затем перезагрузите fish или перезапустите терминал.

 

Краткое описание параметров команды functions

Команда Описание
functions Перечислите все функции.
functions <function_name> Отобразите код определенной функции.
funced <function_name> Отредактируйте функцию в текстовом редакторе по умолчанию.
functions --erase <function_name> Удалить функцию.
functions --copy <old> <new> Скопируйте функции новое имя.
functions <name> > file.fish Сохраните определение функции в файл.

 

Заключение

Команда functions — обязательный инструмент для пользователей оболочки Fish. Она даёт вам полный контроль над средой оболочки и упрощает работу с функциями. Для получения более подробной информации обратитесь к разделу о функциях в официальной документации Fish Shell.

Exit mobile version