В оболочке Fish есть специальная команда functions
для управления функциями и взаимодействия с ними. Но в Bash нет встроенной команды, подобной functions
как в Fish shell, для управления функциями. Однако в Bash есть другие инструменты и методы для достижения аналогичной функциональности. В этом руководстве мы узнаем, как эффективно управлять функциями Bashс помощью команды declare.
Как управлять функциями в Bash
1. Создайте или определите новую функцию
Мы можем создать или определить функцию либо непосредственно в файле ~/.bashrc
, либо сохранить функции в отдельных файлах в специальном каталоге, например ~/.bash_functions
.
Хранение всех функций в одном каталоге позволяет упорядочить их и упростить управление ими.
Создайте специальный каталог для хранения всех функций:
mkdir ~/.bash_fucntions
Храните функции в отдельных файлах:
Сохраните каждую функцию в отдельном файле в разделе ~/.bash_functions/
.
Давайте создадим пример функции с именем cdls
.
nano ~/.bash_functions/cdls.sh
Добавьте в него следующие строки:
cdls () { cd "$@" && ls --color=auto }
Исходные функции из ~/.bashrc
:
Добавьте следующие строки в свой ~/.bashrc
, чтобы автоматически загрузить все функциональные файлы:
for func_file in ~/.bash_functions/*.sh; do source "$func_file" done
Теперь вы можете использовать функцию cdls
для автоматического вывода списка содержимого каталога при входе в него.
cdls Downloads/
Теперь вы можете использовать команду declare
для просмотра списка функций, их просмотра или удаления по мере необходимости.
2. Перечислите все функции
Чтобы вывести список всех функций, определённых в Bash в данный момент, используйте команду declare
с опцией -F
:
declare -F
Это выведет на экран имена всех функций. Если вы хотите увидеть и имена, и определения, используйте:
declare -f
3. Просмотр определенной функции
Чтобы просмотреть определение конкретной функции, используйте declare -f
и укажите имя функции:
declare -f function_name
Например, чтобы просмотреть определение вызываемой функции cdls
, выполните:
declare -f cdls
Пример вывода:
cdls () { cd "$@" && ls --color=auto }
4. Удалить функцию
Чтобы удалить (отменить настройку) функцию, используйте команду unset
:
unset -f function_name
Например, чтобы удалить функцию cdls
:
unset -f cdls
5. Отредактируйте функцию
Чтобы отредактировать функцию, вы можете либо:
- Вручную отредактируйте файл, в котором определена функция (например,
~/.bashrc
или~/.bash_functions/
). - Используйте комбинацию
declare -f
и текстовый редактор для редактирования функции непосредственно в терминале.
Например, для редактирования функции cdls
:
declare -f cdls > /tmp/cdls.sh nano /tmp/cdls.sh source /tmp/cdls.sh
6. Сохраните функции в файл
Чтобы сохранить определение функции в файле, используйте declare -f
и перенаправьте вывод:
declare -f function_name > filename.sh
Например, чтобы сохранить cdls
функцию в файл:
declare -f cdls > ~/.bash_functions/cdls.sh
7. Загрузка функций из файла
Чтобы загрузить функцию из файла, используйте команду source
:
source filename.sh
Например, чтобы загрузить функцию cdls
:
source ~/.bash_functions/cdls.sh
8. Скопируйте функцию
Чтобы скопировать функции новое имя, используйте declare -f
и eval
:
declare -f original_function > /tmp/temp_function sed 's/original_function/new_function/g' /tmp/temp_function | source /dev/stdin
Например, скопировать cdls
в mycdls
:
declare -f cdls > /tmp/temp_function sed 's/cdls/mycdls/g' /tmp/temp_function | source /dev/stdin
9. Проверьте, существует ли Функция
Чтобы проверить, существует ли функция, используйте declare -F
и grep:
if declare -F function_name > /dev/null; then echo "Function exists" else echo "Function does not exist" fi
Контрольная таблица: Управление функциями в Bash
Перечислите Все Функции:
declare -F
Просмотр определенной функции:
declare -f cdls
Удаление функции:
unset -f cdls
Сохраните функцию в файл:
declare -f cdls > ~/.bash_functions/cdls.sh
Загрузка функции из файла:
source ~/.bash_functions/cdls.sh
Краткие сведения
Хотя в Bash нет специальной команды functions
для оболочки Fish, вы можете добиться аналогичного результата с помощью команды declare
. Сохраняя функции в отдельных файлах и вызывая их из ~/.bashrc
, вы можете поддерживать чистоту и порядок в своей системе.