У меня есть ловушка после получения, которая развертывает нашу ветку master, когда мы нажимаем master.
Я бы хотел сделать развертывание необязательным;крюк запрашивает простой ответ Y / N для достижения этого;bash псевдокод ниже:
echo "Should I deploy this code now? Enter Y/N"
read deploy_code
case ${deploy_code} in
"Y") do_a_deploy ;;
"N") exit ;;
*) # ask the question again if not Y or N ;;
esac
Из-за способа, которым хук post-receive получает свои аргументы в stdin, строка read
не делает паузу для ввода от пользователя, и сценарий повторяется по кругупытаясь получить ответ Y / N.
Я думал, что конкретный запрос от /dev/tty
исправит это;
read deploy_code < /dev/tty
, но это все равно заставляет скрипт бесконечно зацикливаться, поскольку вводне приходит с клавиатуры.
Возможно ли получить ввод с клавиатуры в таких условиях?
Редактировать: А-а.Похоже, это на самом деле ssh виноват.Теперь, глядя на вывод, я добавил < /dev/tty
Я вижу / dev / tty: Нет такого устройства или адреса
И я могу имитировать это, если я запускаю скрипт локально, но через ssh:
ssh 127.0.0.1 "echo 40913e300c8bf4ed7ea91b5ef61a522f3be2c05f e2aabfc865547d8b494b76c96947bab0c62acfec refs/heads/master | /path/to/post-receive"
Edit 2:
Так что я могу установить опцию -t ssh для запроса tty согласно tty в сеансе SSH или я мог бы включить его в файле authorised_keys на сервере для каждого ключа
Редактировать 3:
После создания ~/ bin / ssh-t
#!/bin/sh
ssh -tt "$@"
(опция double -t заставляет tty) и установка GIT_SSH для указания на него, теперь я получаю ужасное роковое: ошибка протокола: плохая строкадлина символа: , за которым следует 005, что, я думаю, что-то в .bash_profile или аналогичное эхо, прежде чем git сможет запустить