Зависит от функции. Если это просто очень простая однострочная строка, вы можете создать псевдоним или вставить функцию ~/.bashrc(файл, который загружается в bash при запуске).
Если вы создаете что-то более мясистое, возможно, имеет смысл создать собственный исполняемый скрипт, в ~/bin/котором по умолчанию не будет (это просто каталог), но он должен быть на вашем пути. Помните, что для этого файл должен быть исполняемым ( chmod +x filename) и начинаться с правильного #!/bin/bashраздела.
Второй маршрут имеет ряд явных преимуществ:
Легче увидеть что доступно
Синтаксическая ошибка не повлияет на ваш профиль
Вам не нужно продолжать использовать ваш bash-конфигурацию, если вы измените скрипт
Он доступен для любой оболочки, если используется полный путь или он также ~/bin/находится в пути к этой оболочке (что в большинстве случаев должно быть AFAIK).
Я использовал более поздний вариант. Моя функция содержит команды, которые удаляют файлы, что-то wget, выполняет команды javac и java. и когда я попробовал это на терминале gnome, он не работает нормально. Как вы думаете, есть проблема?
Абель Мелькиадес Каллехо
Что он делает вместо этого?
Оли
Это уже исправлено. Исправлено с помощью этого ответа
Абель Melquiades Callejo
хм ... разве пользовательские скрипты не должны /usr/local/binвместо этого возиться с $PATH?
Брайам
Мне кажется, что небольшое, но заслуживающее упоминания преимущество размещения функций ~/.bashrc(как и sourced) заключается в том, что Bash ищет функции перед выполнением поиска по PATH.
Занна
4
Наилучшим выбором будет ~/.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чтобы проверить его существование и затем получить его.
спасибо, это сработало. кстати, чем он отличается от .profile? в некоторых Linux я не могу поместить функции в bashrc
Abel Melquiades Callejo
2
~/.profileФайл выполняется интерпретатором команд для оболочек входа в систему. Когда вы используете GUI и открываете терминал, этот файл не выполняется, потому что вы будете в оболочке, не входящей в систему.
Раду Рэдяну
1
Вот важная процедура объявления постоянной функции:
Откройте ~/.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: «Функции выполняются в контексте текущей оболочки; не создается новый процесс для их интерпретации». Это означает, что вы также должны знать о функциях, которые могут изменять среду выполнения вашей оболочки - изменять переменные и настройки терминала.
/usr/local/bin
вместо этого возиться с$PATH
?~/.bashrc
(как иsource
d) заключается в том, что Bash ищет функции перед выполнением поиска по PATH.Наилучшим выбором будет
~/.bashrc
файл.Вы можете написать свои функции определения оболочки непосредственно в
~/.bashrc
файле, или, если у вас есть много из них и не хотите загромождать~/.bashrc
файл, вы можете поместить их в другой файл по вашему выбору - только убедитесь , что источник этого файл в вашем~/.bashrc
файле. Например, если файл с вашими функциями названbash_functions
, просто добавьте в ваш~/.bashrc
файл строки:или, что эквивалентно:
где
.
это просто символическое представлениеsource
. Тестif
проверяет,/path/to/bash_functions
существует ли файл, прежде чем пытаться найти его.Этот метод очень похож на создание псевдонимов
~/.bashrc
путем создания файла с именем~/.bash_aliases
и использования синтаксиса, аналогичного приведенному выше,~/.bashrc
чтобы проверить его существование и затем получить его.источник
~/.profile
Файл выполняется интерпретатором команд для оболочек входа в систему. Когда вы используете GUI и открываете терминал, этот файл не выполняется, потому что вы будете в оболочке, не входящей в систему.Вот важная процедура объявления постоянной функции:
Откройте
~/.bashrc
файл в текстовом редакторе. Неважно, какой текстовый редактор, если вы знаете, как его использовать, и если вы открываете/home/<username>/.bashrc
В конце
~/.bashrc
объявите вашу собственную функцию, например:Сохраните и закройте файл.
~/.bashrc
Файл считывается каждый раз при открытии интерактивной оболочки (то есть новая вкладка терминала, Логин с помощьюssh
или открыть tty1 или другой виртуальной консоли). Это не будет доступно в файлах сценариев, поскольку~/.bashrc
не читается для неинтерактивных оболочек. Это также не доступно, если вы работаетеbash
с--norc
опцией.Если вы хотите, чтобы эта функция была доступна сразу на открытой вкладке, используйте
source ~/.bashrc
команду.Функции принимают аргументы, как обычные команды. Например,
$1
через$9
указывают позиционные параметры при вызове функции. В приведенном выше примереfind_dirs
принимает только один позиционный параметр и будет называться какfind_dirs /etc
. Вы также можете использовать$@
для ссылки на все позиционные параметры. Функции также принимают перенаправление. Вы можете вызвать функцию с помощьюfind_dirs $1 > /dev/null
; мы также можем объявить это следующим образом:Примечание от
man bash
: «Функции выполняются в контексте текущей оболочки; не создается новый процесс для их интерпретации». Это означает, что вы также должны знать о функциях, которые могут изменять среду выполнения вашей оболочки - изменять переменные и настройки терминала.источник