Где я могу разместить пользовательскую функцию оболочки?
Я планирую создать функцию, которая упростит мне вещи. Функция будет что-то вроде
function lazymode()
{
echo "Hello World!";
}
так что когда я использую команду lazymode
в оболочке он выведет Hello World!
,
В какой файл я должен поставить пользовательскую функцию?
3 ответа
Зависит от функции. Если это просто супер-простая однострочная строка, вы можете создать псевдоним или вставить функцию в ~/.bashrc
(файл, который bash загружает при запуске).
Если вы создаете что-то более мясистое, возможно, имеет смысл создать собственный исполняемый скрипт в ~/bin/
который не существует по умолчанию (это просто каталог), но должен быть в вашем пути. Помните, что для этого файл должен быть исполняемым (chmod +x filename
) и начать с правильного #!/bin/bash
строфа.
Второй маршрут имеет ряд явных преимуществ:
- Легче увидеть что доступно
- Синтаксическая ошибка не повлияет на ваш профиль
- Вам не нужно продолжать использовать ваш bash-конфигурацию, если вы измените скрипт
- Он доступен для любой оболочки, если используется полный путь или
~/bin/
находится в пути для этой оболочки (что должно быть в большинстве случаев AFAIK).
Лучший выбор будет ~/.bashrc
файл.
Вы можете написать свои определения функций оболочки прямо в вашем ~/.bashrc
файл, или, если у вас их много и вы не хотите загромождать ~/.bashrc
файл, вы можете поместить их все в другой файл по вашему выбору - просто убедитесь, что источник этого файла в вашем ~/.bashrc
файл. Например, если файл с вашими функциями называется bash_functions
Просто добавьте в свой ~/.bashrc
подать строки:
if [[ -f /path/to/bash_functions ]]; then
source /path/to/bash_functions
fi
или, что эквивалентно:
if [[ -f /path/to/bash_functions ]]; then
. /path/to/bash_functions
fi
где .
это просто символическое представление source
, if
тест проверяет файл /path/to/bash_functions
существует, прежде чем пытаться найти его.
Этот метод очень похож на создание псевдонимов в ~/.bashrc
создав файл с именем ~/.bash_aliases
и используя синтаксис, аналогичный приведенному выше в ~/.bashrc
проверить его существование, а затем найти его.
Вот важная процедура объявления постоянной функции:
открыто
~/.bashrc
файл в текстовом редакторе. Не имеет значения, какой текстовый редактор, если вы знаете, как его использовать, и когда вы открываете/home/<username>/.bashrc
В конце
~/.bashrc
объявите свою собственную функцию, например:find_dirs(){ find "$1" -type d }
Сохраните и закройте файл.
~/.bashrc
файл читается каждый раз, когда вы открываете интерактивную оболочку (это новая вкладка терминала, войдите через ssh
или откройте TTY1 или другую виртуальную консоль). Это не будет доступно в файлах скриптов, потому что ~/.bashrc
не читается для неинтерактивных оболочек. Это также не доступно, если вы запускаете bash
с --norc
вариант.
Если вы хотите, чтобы эта функция была доступна сразу на открытой вкладке, используйте source ~/.bashrc
команда.
Функции принимают аргументы, как обычные команды. Например, $1
через $9
указать позиционные параметры при вызове функции. В приведенном выше примере find_dirs
принимает только один позиционный параметр и будет называться find_dirs /etc
, Вы также можете использовать $@
ссылаться на все позиционные параметры. Функции также принимают перенаправление. Вы можете вызвать функцию с find_dirs $1 > /dev/null
; мы также можем объявить это следующим образом:
find_dirs(){
find "$1" -type d
}
Примечание от man bash
: "Функции выполняются в контексте текущей оболочки; новый процесс для их интерпретации не создается". Это означает, что вы также должны знать о функциях, которые могут изменять среду выполнения вашей оболочки - изменять переменные и настройки терминала.