сделайте команды оболочки доступными в git hook

#git #sh #githooks

Вопрос:

Цель состоит в том, чтобы сделать некоторый набор команд доступным для пользователя после их клонирования/проверки репо.

файл крючка git

 #!/bin/sh echo $PWD/dev-commands.sh source $PWD/dev-commands.sh  

команда, которую я хочу сделать доступной после имен крючков git dev-commands.sh

 #!/bin/sh function greet() {  echo Hello }  

это, похоже, не делает команду доступной. если я запущу исходный код dev-commands.sh в каталоге вручную это делает greet команды доступными..

какие-нибудь советы?

Ответ №1:

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

 ( doit() { echo hi; }; doit ); doit  

например, скажет hi , а затем, очень вероятно, пожалуется -bash: doit: command not found или эквивалентное сообщение, потому что родители должны были поместить doit их в подоболочку, у которой есть своя собственная среда, точно так же, как крючки git.

Изменение пространства имен чьей-либо оболочки на лету без их активного сотрудничества может и будет точно описано как вредоносное ПО.

Включите команду настройки, которую они могут отправить, если захотят.

Комментарии:

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

2. Я обычно предоставляю целевые файлы makefile для настройки. make setup его довольно легко запомнить, и он может делать все, что вы захотите. Вы даже можете предположить, что они скажут make -n setup , чтобы посмотреть, что это даст.

3. Обратите внимание, что у bash, в частности, есть «функция», в которой вы можете экспортировать функцию в несвязанную вложенную оболочку с помощью переменных среды. (Bash кодирует функцию как текст, а затем вложенная оболочка сканирует текст и заново создает функцию.) Это имеет некоторые неприятные последствия для безопасности, поэтому можно надеяться, что по умолчанию он отключен…