git после получения перехватов запускает сценарий оболочки удаленного сервера ошибка, ожидающая keyword_do

#git #shell #githooks

#git #оболочка #githooks

Вопрос:

при следующем получении перехвата после отправки я получаю ошибку после отправки в репозиторий, remote: hooks/post-receive:: syntax error, unexpected $undefined, expecting keyword_do or '{' or '('

опубликуйте сценарий получения следующим образом,

#!bin/bash
while read oldrev newrev ref
do
ssh user1@ip -pPassword 'path/to/the/shell.sh'
end

в этом случае на моем удаленном сервере включен paswd , я попробовал следующим образом

#!bin/bash
while read oldrev newrev ref do
ssh user1@ip -pPassword 'path/to/the/shell.sh'
end

#!bin/bash
while read oldrev newrev ref
do
(ssh user1@ip -pPassword 'path/to/the/shell.sh');
end

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

1. Протестируйте свой скрипт post-receive вручную, запустив его самостоятельно. При необходимости предоставьте ему пример ввода, хотя при такого рода синтаксической ошибке вы обычно получите синтаксическую ошибку до того, как она попытается что-либо прочитать.

2. @Sadzone Это почти наверняка сообщение об ошибке от вашего shell.sh , поэтому вы должны показать его нам.

Ответ №1:

Для while цикла в bash вы можете либо:

 #!/bin/bash
while read oldrev newrev ref;do
    echo $read $oldrev $newrev $ref
done
  

или

 #!/bin/bash
while read oldrev newrev ref
do
    echo $read $oldrev $newrev $ref
done
  

или

 #!/bin/bash
while read oldrev newrev rev;do echo $read $oldrev $newrev $ref;done
  

Я не уверен, что ssh часть верна, но я не думаю, что это необходимо.

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

1. ни один из них не сработал для моего сценария, я получаю ту же ошибку, включая syntax error, unexpected end-of-input, expecting keyword_end

Ответ №2:

Я не уверен, что часть ssh правильная

На самом деле, ssh может работать, но является частью проблемы:

  • проверьте, ssh -T user1@ip -pPassword работает ли это при выполнении с сервера, на котором находится перехват после получения
  • проверьте, что это работает беззвучно, что означает, что пользователь1 .bashrc или .profile не передает эхо-сигнал на кучу строк, которые затем могут помешать выполнению перехвата.