Поиск по сайту:
В мыслях своих замесив попреками льстивые речи.. (Тимон об Аркесилае).

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

24.01.2025
Как управлять командой функциями 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.
  • Подходит для небольших функций или быстрой настройки.
Читать  Как установить время ожидания в cURL

 

Минусы:

  • Если у вас много функций в 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/ для удобства и повышения производительности.

 

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

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

functions

 

Читать  11 полезных команд Linux на основе X-window (графического интерфейса) — часть I

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

 

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

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

 

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

Читать  Команда last в Linux

 

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.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

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

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


Рекомендуемое
С узкими местами в пространстве и энергоемкости сталкиваются не только…

Спасибо!

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