Как управлять функциями Bash с помощью команды declare в Linux

В оболочке 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, вы можете поддерживать чистоту и порядок в своей системе.
Редактор: AndreyEx