Intereting Posts
ssh_exchange_identification: соединение закрыто удаленным хостом Как имитировать хаб? Формирование файла в командной строке для печати Как измерить использование шины PCI-Express? Проблемы с правами доступа к файлам с веб-сервером и FTP-сервером Как распечатать индекс цикла в файл с помощью awk? Как внести изменения в инструмент настройки nvidia-settings Linux Mint не загружается, если не удается смонтировать (совместно используемое) устройство, указанное в fstab изменения rhosts и повторная инициализация Как показать и использовать удаленный рабочий стол Linux, когда SSH или любая другая удаленная служба недоступна? Как я могу обновить приложение из нового источника? Перемещение и пустое / домашнее разделение Ubuntu libGLEW.so.1.11: невозможно открыть файл общих объектов Создание готовых изображений gentoo для развертывания Почему система не реагирует, когда сетевая нагрузка составляет 90-95 Мбит / с?

Как мне повторно использовать функцию в нескольких скриптах?

В bash иногда я хотел бы повторно использовать функцию в нескольких скриптах. Разве плохо повторять определение функции во всех скриптах? Если так, что является хорошей практикой?

Является ли следующий способ хорошей идеей?

  • оберните определение функции myfunction в ее собственный скрипт define_myfunction.sh ,
  • в любом скрипте, где вызывается функция, source define_myfunction.sh , а затем вызовите функцию myfunction arg1 arg2 ...

Благодарю.

В bash это хороший способ сделать это, да.

Поиск сценария «библиотека» с использованием source или . было бы адекватным решением вашей проблемы, связанной с разделением определения функции между двумя или более сценариями. Каждый сценарий, которому необходим доступ к функциям, определенным в сценариях «библиотеки», будет содержать необходимые файлы, вероятно, в верхней части сценария.

Это позволит вам собирать связанные функции в единый «библиотечный» скрипт и использовать его для получения доступа к ним.

Не совсем не связано, но shell bash также имеет возможность автоматически получать файл при выполнении неинтерактивной оболочки (например, сценария). Это может быть использовано для настройки конкретной среды для скрипта:

 BASH_ENV="$HOME/stuff/script.env" ./myscript 

… где script.env может делать что угодно, от определения функций и установки переменных оболочки или окружения, до получения других файлов и т. д.


Некоторые оболочки, например ksh93 , имеют переменную окружения, которая указывает на каталог, который может содержать сценарии определения функций, подобные этим. В ksh93 эта переменная называется FPATH . Скрипт $FPATH/foo будет содержать функцию с именем foo , которая будет автоматически найдена, когда пользователь foo в командной строке (или в скрипте). bash мне известно, shell bash не обладает этой специфической функциональностью.

Другие оболочки имеют другие функции «автозагрузки».

Этот вопрос может быть помечен как субъективный, но я считаю, что общепринятой практикой является использование библиотек для часто используемого кода вместо того, чтобы заново изобретать колесо source сценарий, который определяет функции и переменные, является оболочкой для этого, поэтому я бы сказал, да, наличие библиотечных сценариев и их source , вероятно, является хорошей практикой.

На самом деле я иду дальше и у меня есть каталог bin в моем PATH с инструментами и скриптами, которые я часто использую; некоторые из этих библиотечных сценариев находятся там, поэтому я могу легко найти их для использования в моей интерактивной оболочке.