2014-09-07 2 views
1

У меня есть следующий скрипт bash, чтобы запустить ssh-agent, добавить мои ключи и выполнить git pull on repo. Агент запускается, ключ добавляется, но git pull не выполняется ... по крайней мере, ничего не происходит на терминале. Команда git работает, если я ввожу ее в терминал ... есть ли что-то, что мне нужно сделать в моем сценарии bash, чтобы заставить его работать?Как выполнить команды git из сценария bash?

#!/bin/bash 

# if we can't find an agent, start one, and restart the script. 
if [ -z "$SSH_AUTH_SOCK" ] ; then 
    exec ssh-agent bash -c "ssh-add ; $0" 
    exit 
fi 

exec ssh-add ~/.ssh/mykey 
git --git-dir=/var/www/node/myapp/.git pull origin master 

Когда я добавляю -х до #!/Bin/баш это терминальный вывод

+ '[' -z '' ']' 
+ exec ssh-agent bash -c 'ssh-add ; ./startgit.sh' 
+ '[' -z /tmp/ssh-<redacted>/agent.1733 ']' 
+ exec ssh-add /home/ec2-user/.ssh/mykey 
Identity added: /home/ec2-user/.ssh/mykey (/home/ec2-user/.ssh/mykey) 
+2

Вы уверены, что вы перезапуск сценария после выхода, если 'SSH_AUTH_SOCK' пуст? Вы попробовали «отладить» его ('#!/Bin/bash -x', чтобы эхо запускать команды)? –

ответ

8

Команда exec заменяет текущую оболочку с процессом, который выполняется. Поэтому строки, которые следуют за ним в вашем скрипте, не выполняются.

Из страницы руководства:

Exec: EXEC [-cl] [-a] названия файла [Перенаправления ...]

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

exec ssh-add ~/.ssh/mykey 

и просто

ssh-add ~/.ssh/mykey 
+0

спасибо !! Отлично работает – SomethingOn

Смежные вопросы