Сочиняю я, значится, скрипт. Опыта нет, поэтому постоянно его запускаю - чтоб проверять как всё работает. И вот такая распрекрасная ошибка вылетела:
# ...
# ... тут всякое разное происходит:
Processing triggers for systemd (241-7~deb10u2) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for libc-bin (2.28-10) ...
Connection to 192.168.122.157 closed. # <--- последняя строка всякого разного
./lr.sh: строка 385: $'ncer\nfi\n\n# Если были выбраны нули - значит происходит продолжение прерванного ранее процесса\n# и устанавливать ничего не нужно\necho ': команда не найдена
./lr.sh: строка 388: На: команда не найдена
Настраиваем мастер # <--- тут нормально пошло
ALTER SYSTEM
Connection to 192.168.122.157 closed.
...
...
А вот как это выглядит в виде скрипта:
if [ ${MASTER_VERSION} -eq 0 ]
then echo "Выбран 0, пропускаем."
elif [ ${MASTER_VERSION} -eq 1 ] # PostgreSQL 9.4
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGDG94_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 2 ] # PostgreSQL 9.5
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGDG95_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 3 ] # PostgreSQL 9.6
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGDG96_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 4 ] # PostgreSQL 10
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGDG10_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 5 ] # PostgreSQL 11
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGDG11_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 6 ] # PostgreSQL 12
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGDG12_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 7 ] # Postgres Pro Standard 9.6
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPS96_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 8 ] # Postgres Pro Standard 10
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPS10_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 9 ] # Postgres Pro Standard 11
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPS11_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 10 ] # Postgres Pro Standard 12
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPS12_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 11 ] # Postgres Pro Enterprise 9.6
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPE96_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 12 ] # Postgres Pro Enterprise 10
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPE10_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 13 ] # Postgres Pro Enterprise 11
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPE11_PKG} pgbouncer"
elif [ ${MASTER_VERSION} -eq 14 ] # Postgres Pro Enterprise 12
### ниже как раз начинается 385 строка:
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPE12_PKG} pgbouncer"
fi
# Если были выбраны нули - значит происходит продолжение прерванного ранее процесса
# и устанавливать ничего не нужно
echo "
На реплике:"
if [ ${REPLICA_VERSION} -eq 0 ]
then echo "Выбран 0, пропускаем."
elif [ ${REPLICA_VERSION} -eq 1 ] # PostgreSQL 11
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGDG11_PKG} pgbouncer"
elif [ ${REPLICA_VERSION} -eq 2 ] # PostgreSQL 12
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGDG12_PKG} pgbouncer"
elif [ ${REPLICA_VERSION} -eq 3 ] # Postgres Pro Standard 11
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGPS11_PKG} pgbouncer"
elif [ ${REPLICA_VERSION} -eq 4 ] # Postgres Pro Standard 12
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGPS12_PKG} pgbouncer"
elif [ ${REPLICA_VERSION} -eq 5 ] # Postgres Pro Enterprise 10
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGPE10_PKG} pgbouncer"
elif [ ${REPLICA_VERSION} -eq 6 ] # Postgres Pro Enterprise 11
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGPE11_PKG} pgbouncer"
elif [ ${REPLICA_VERSION} -eq 7 ] # Postgres Pro Enterprise 12
then ssh -t $RUSERNAME@${REPLICA} "sudo apt-get install ${PGPE12_PKG} pgbouncer"
fi
То есть баш взял и начал читать команды не с начала строки после fi, а до неё, с конца строки
# Он начал с символа под точкой -> .
then ssh -t $MUSERNAME@${MASTER} "sudo apt-get install ${PGPE12_PKG} pgbouncer"
Вот ссылка на картинку, я там выделил ту часть скрипта, которую bash посчитал одной командной строкой: https://yadi.sk/i/nHKSZ4rat_HZlQ
При повторном запуске всё пошло уже без ошибок. Это я к чему - как сделать так, чтоб подобное не повторялось? Как-то не очень приятно осознавать, что bash может взять и пропустить произвольное число команд, начать читать команду с середины строки и, как ни в чём не бывало, идти дальше. Ладно я при отладке это увидел, а если не увидел бы?
К тому же bash также не счёл командой второй по счету then в блоке относящемся к реплике. Два раза на десяти строчках споткнулся.