Логотип

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

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

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

 

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

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

  • Перечислите все функции.
  • Отобразите код определенной функции.
  • Отредактировать функцию.
  • Стереть (delete) функцию.
  • Сохранить в файл функцию.

 

Когда и зачем использовать команду 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

 

Плюсы:

  • Убегает, когда запускается оболочка Fish.
  • Подходит для небольших функций или быстрой настройки.
Читать  Изменить группы в Linux с помощью команды groupmod

 

Минусы:

  • Если у вас много функций в config.fish, это может привести к загромождению.
  • Функции загружаются только при запуске новой оболочки, то есть для внесения изменений требуется перезапустить Fish (exec fish или заново открыть терминал).
  • Более медленный запуск, если config.fish содержит много функций.

 

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

 

Плюсы:

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

 

Минусы:

  • Требуется выполнить дополнительный шаг для сохранения (funcsave function_name или вручную создать .fish файл).
  • Новым пользователям может быть неочевидно, где хранится функция.

 

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

  • Если функция небольшая и важная (например, функция-псевдоним), то можно добавить её в config.fish без проблем.
  • Если функция используется время от времени или является сложной, лучше хранить её в ~/.config/fish/functions/ для удобства и повышения производительности.
Читать  Поиск самых больших файлов и папок в командной строке Linux

 

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

 

Читать  Как исправить зависания Ubuntu, сбои или зависания системы

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

 

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.

Редактор: AndreyEx

Рейтинг: 0 (0 голосов)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала