[BASH] soucis de quote/double quote

Hello,

je me prend tout le temps la tête sur l’utilisation des quotes / double quote au sein de script bash …
Voici le cas ici.

J’ai une fonction :

function retry { nTrys=0 maxTrys=3 status=256 until [ $status == 0 ] ; do $* status=$? nTrys=$(($nTrys + 1)) if [ $nTrys -gt $maxTrys ] ; then echo "Number of re-trys exceeded. Exit code: $status" exit $status fi if [ $status != 0 ] ; then echo "Failed (exit code $status)... retry $nTrys" sleep 60 fi done }

Mon bout de code :

Le but est donc d’utiliser la fonction retry dans l’utilisation de la commande psql …

Comment feriez-vous ?

[code]PostgresDBpresent=retry psql -t -h $REMOTE_HOST -U $PG_USER -d postgres -c "select datname from pg_database where (datname LIKE 'postgres')" 2>> $SCRIPT_LOG_FILE"

psql: warning: extra command-line argument “datname” ignored
psql: warning: extra command-line argument “from” ignored
psql: warning: extra command-line argument “pg_database” ignored
psql: warning: extra command-line argument “where” ignored
psql: warning: extra command-line argument “(datname” ignored
psql: warning: extra command-line argument “LIKE” ignored
psql: warning: extra command-line argument “‘postgres’)” ignored
ERROR: syntax error at end of input
LINE 1: select
^
^Cpsql: warning: extra command-line argument “datname” ignored
psql: warning: extra command-line argument “from” ignored
psql: warning: extra command-line argument “pg_database” ignored
psql: warning: extra command-line argument “where” ignored
psql: warning: extra command-line argument “(datname” ignored
psql: warning: extra command-line argument “LIKE” ignored
psql: warning: extra command-line argument “‘postgres’)” ignored
ERROR: syntax error at end of input
LINE 1: select
^
^Cpsql: warning: extra command-line argument “datname” ignored
psql: warning: extra command-line argument “from” ignored
psql: warning: extra command-line argument “pg_database” ignored
psql: warning: extra command-line argument “where” ignored
psql: warning: extra command-line argument “(datname” ignored
psql: warning: extra command-line argument “LIKE” ignored
psql: warning: extra command-line argument “‘postgres’)” ignored
ERROR: syntax error at end of input
LINE 1: select
^
^Cpsql: warning: extra command-line argument “datname” ignored
psql: warning: extra command-line argument “from” ignored
psql: warning: extra command-line argument “pg_database” ignored
psql: warning: extra command-line argument “where” ignored
psql: warning: extra command-line argument “(datname” ignored
psql: warning: extra command-line argument “LIKE” ignored
psql: warning: extra command-line argument “‘postgres’)” ignored
ERROR: syntax error at end of input
LINE 1: select
^

[/code]

Bon me suis débrouillé avec ça :

Req="psql -t -h $REMOTE_HOST -U $PG_USER -d postgres -c \"select datname from pg_database where (datname LIKE 'postgres')\" 2>> $SCRIPT_LOG_FILE"
PostgresDBpresent=`retry eval "$Req"`

salut,

ton intention est bien de savoir si le serveur sql est joignable, c’est ça?
bah, moi, je me serais servi de ncuntil nc -z $server $portPsql; do sleep 60; done
sans nc, en envoyant la requête sql quand mêmeuntil psql ... || [ $((essais++)) -eq 3 ] do sleep 60 done
la fonction retry doit-elle servir pour d’autres commandes?