Я создал сценарий bash, который выполняется на нескольких машинах, содержащих разные git локальные репозитории. Он проверяет множество условий и сообщает мне, есть ли в репозитории незафиксированные файлы, неотслеживаемые файлы, и, в частности, один тест сообщает мне, что локальный опережает или отстает от удаленного по количеству коммитов. Проблема со сценарием заключается в том, что он не возвращает и не устанавливает флаг «ОК», который я использую для вывода сообщения «ОК», если все синхронизировано c. Итак, я получаю сообщение, что он впереди или позади, но затем получаю сообщение «ОК». Вот часть скрипта, которая делает вперед или назад, и я не вижу, как заставить его каким-то образом установить ok = false.
git fetch>/dev/null && git branch -v |
perl -wlne'
print "$ENV{reponame} [$1] --> $3 $2"
if /^..(\S+)\s+([a-f0-9]+)\s+(\[(?:ahead|behind)\s+\d+\])/
' |
while IFS= read -r MOD; do
ok=false
printf ' %s\n' "$MOD" # Replace with code that uses $MOD
done
if $ok; then
echo " OK --> $reponame [$br] $rev"
fi
Я скопировал это из другого скрипта и не делаю этого. t действительно понимаю IFS = read -r MOD; раздел, который, как я думал, может установить флаг, но этого не происходит.
Это результат, который я получаю:
bin [develop] --> [behind 1] 026e1ad
OK --> bin [develop] 026e1ad
OK --> notes [develop] 4cd077f
OK --> indecks [develop] e6b4293
OK --> queue [develop] 5469679
OK --> frameworks [master] 05fedb6
OK --> dashboard [isolate] f8b1101
OK --> nodejs [develop] 5af2ea7
OK --> perl-forth [master] 45cc837
OK --> blog [master] c19edfd
Обратите внимание, что для bin я получаю:
bin [develop] --> [behind 1] 026e1ad
OK --> bin [develop] 026e1ad
Я бы предпочел не получать это нормально после 1 позади! Другой сценарий проверяет наличие любых ошибок в левом столбце и отправляет мне электронное письмо.
С помощью perl и всех трубопроводов, как я могу установить переменную ok перед печатью?