Если я выполю какой то код в сеансе терминала, он отработает. Но совсем нет гарантии что он будет работать так же в сценарии, и тем более при запуске например через cron.
С кроном все можно разрулить, сейчас не пойму вот что:
root@PostgreSQL:/home/maintainer/rdiff_test# wegasgasdfg="$(ls /incrimental/bis_kamin55_psql | grep -E "^bis_kamin55_psql.*2020-12-04.*(.delta|.dump.gz)$")"
root@PostgreSQL:/home/maintainer/rdiff_test# echo $wegasgasdfg
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-00.dump.delta bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-06.dump.delta bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-10.dump.delta bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-14.dump.delta bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-18.dump.delta bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-22.dump.delta
Вроде все хорошо. Но теперь делаю так:
root@PostgreSQL:/home/maintainer# cat /root/do_restore.sh
#!/bin/bash -x
PORT=5433
USERNAME='dbadmin'
SERVERNAME='localhost'
ARCHIVEDIR='/incrimental'
NEWDBNAME='';
OLDDBNAME='';
ARCHIVEDATE='';
if [[ $1 != '' ]]
then
NEWDBNAME=$1
else
echo "Enter new DB name as first parametr"
exit
fi
if [[ $2 != '' ]]
then
OLDDBNAME=$2
else
echo "Enter DB name in archive"
exit
fi
if [[ $3 != '' ]]
then
ARCHIVEDATE=$3
else
echo "Enter date in forman YYYY-mm-dd"
exit
fi
#arr=( "$(ls $ARCHIVEDIR/$OLDDBNAME | grep -E "^$OLDDBNAME.*$ARCHIVEDATE.*(.dump.gz.delta|.dump.gz)\$")" )
#arr=( "$(ls /incrimental/bis_kamin55_psql | grep -E \"^bis_kamin55_psql.*2020-12-04.*(.delta|.dump.gz)\$\")" )
aaa="$(ls /incrimental/bis_kamin55_psql | grep -E "^bis_kamin55_psql.*2020-12-04.*(.delta|.dump.gz)\$")"
echo "$aaa"
echo $DBNAME
if psql -U $USERNAME -h $SERVERNAME -p $PORT -lqt | cut -d \| -f 1 | grep -qw $DBNAME
then
echo "Database with this name exists on this cluster"
exit
fi
echo -n "Restore database? (Y/n) "
read answer
case "$answer" in
Y)
psql -U $USERNAME -h $SERVERNAME -p $PORT -c 'create database '$DBNAME -d postgres
if file $DUMPGZ | grep -qw "PostgreSQL custom database dump"
then
pg_restore -h $SERVERNAME -U $USERNAME -p $PORT -d $DBNAME -w -Fc $DUMPGZ
else
gunzip < $DUMPGZ | psql -h $SERVERNAME -U $USERNAME -p $PORT -d $DBNAME
fi
;;
*) exit 0
;;
При запуске получаем какой то выхлоп от grep
root@PostgreSQL:/home/maintainer# /root/do_restore.sh newdbname bis_kamin55_psql 2020-12-03
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-00.dump.delta
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-06.dump.delta
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-10.dump.delta
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-14.dump.delta
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-18.dump.delta
bis_kamin55_psql_Ii4Ekongaew9jie_daily_2020-12-04-22.dump.delta
Использование: grep [ПАРАМЕТР]… ШАБЛОН [ФАЙЛ]…
Запустите «grep --help» для получения более подробного описания.
Restore database? (Y/n)
Что поменялось?