Определить функции для нескольких оболочек

В настоящее время я использую рыбные раковины. Как я часто использую fish, zsh, bash Как я могу определить функцию в одном из них, которая будет доступна для всей оболочки? Должен ли я определить их в .profile?

Когда я выхожу из терминала и снова использую его, я получаю:

1 ответ

Решение

Вы можете просто определить функцию в ~/.*rc файл каждой из оболочек, которые вы используете. Или вы можете создать новый файл для этой функции и других функций оболочки, которые вы хотите использовать во всех оболочках... например...

nano shell-functions

Я определяю свою функцию внутри файла...

hi() { echo "How are you $1?" ; }

сохранить и выйти, затем я редактирую ~/.bashrc а также ~/.zshrc и в конце каждого из них добавьте строку:

source shell-functions

или просто

. shell-functions

Который делает то же самое.

После редактирования моего ~/.*rc файлы, я открываю новую оболочку и функция доступна:

$ bash
$ hi zanna
how are you zanna ?
$ zsh
% hi zanna
how are you zanna ?

source Команда читает файлы и выполняет команды от них в текущей оболочке (в отличие от запуска сценария, как ./script который выполняет скрипт в новой оболочке). В этом случае вы хотите определить функцию для открываемой оболочки, поэтому вы хотите source файл, который содержит его, чтобы сделать его доступным в оболочке. Если вы посмотрите в свой ~/.profile Вы можете увидеть пример того, как один файл конфигурации использует другой, например:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"

Так что по умолчанию ~/.profile источники ~/.bashrc в убунту. Вы также можете проверить source сделав файл, давайте назовем его file1, с какой-то командой в нем вроде (для bash) PS1='I messed up my prompt ' сохранить, выйти, затем в типе оболочки source file1 и вы увидите эффект (откройте новую оболочку (например, введите bash или откройте новое окно терминала) и все вернется на круги своя)...

Другие вопросы по тегам