URL: https://linuxfr.org/forums/astucesdivers/posts/bidouille-script-bash-probl%C3%A8me Title: bidouille script BASH problème :( Authors: ratw3 Date: 2011年02月01日T14:03:47+01:00 Tags: Score: 1 Bonjour à tous! Voila le contexte, j'ai de nombreux scripts rsync qui tourne chaque nuit, le problème c'est qu'il est difficil de savoir si chaque commande rsync a bien fonctionner ou non et pourtant, c'est primordial. Je me suis donc dis que je pourrais générer un csv suite à l'execution de chaque commande afin de transformer ça par la suite en page html consultable chaque jour... Mais je rencontre certaines difficulté... L'idée c'est que dans chaque script rsync je source un fichier nommé "lib.h" ce fichier contient une fonction my_rsync () et je veux remplacer toutes mes commandes rsync par "my_rsync" (merci sed ;) Le problème c'est que certains arguments de la ligne de commande originale et notamment les " " semblent ne pas être pris en compte. Voici les scripts: tout d'abord lib.h: #!/bin/bash my_rsync () { DATE=$(date "+%m/%d/%y %H:%M") PJ=$PROJECT CMD=$* rsync $* RESULT=$? PARSED_COMMAND=$(echo $*) if [ $RESULT = 0 ] then OKNOK=OK else OKNOK=KO fi echo "${OKNOK};${DATE};${PJ};${0};${PARSED_COMMAND}" >> LIST.txt } Puis mon script de test nommé test.sh #!/bin/sh # Variable definition RHOST=my.remote-server.com RUSER=user sshkey=/root/.ssh/transfer . ./lib/lib.h # Synchronize local generated_data directory to remote host my_rsync -azurLptq -e "ssh -i $sshkey" --progress --exclude=*SEG* --exclude=*Md* --exclude=*YouHou* --exclude=*BreastFV* /datas/RES/generated_data ${RUSER}@${RHOST}:/data/RES/ ==================================== Comme vous pouvez le voir le script précédent source le script lib.sh Il semble que la partie de la ligne contenant "ssh -i $sshkey" ne soit pas récupérer lors de l'execution de $* Voici l execution du test-script.sh avec bash -xv #!/bin/sh # Variable definition RHOST=my.remote-server.com + RHOST=my.remote-server.com RUSER=user + RUSER=ruser sshkey=/root/.ssh/transfer + sshkey=/root/.ssh/transfer . ./lib/lib.h + . ./lib/lib.h #!/bin/bash my_rsync () { DATE=$(date "+%m/%d/%y %H:%M") PJ=$PROJECT CMD=$* `echo rsync $CMD` RESULT=$? PARSED_COMMAND=$(echo $*) if [ $RESULT = 0 ] then OKNOK=OK else OKNOK=KO fi echo "${OKNOK};${DATE};${PJ};${0};${PARSED_COMMAND}" >> LIST.txt } # Synchronize local generated_data directory to remote host my_rsync -azurLptq -e "ssh -i $sshkey" --progress --exclude=*SEG* --exclude=blabla + my_rsync -azurLptq -e 'ssh -i /root/.ssh/transfer' --progress '--exclude=*SEG*' '--exclude=*blablablablabala date "+%m/%d/%y %H:%M") date "+%m/%d/%y %H:%M" ++ date '+%m/%d/%y %H:%M' + DATE='02/01/11 12:54' + PJ= + CMD='-azurLptq -e ssh -i /root/.ssh/transfer --progress --exclude=*SEG* --exclude=*blablabla* /images/RESTORE_2/generated_data user@my.remote_server.com:/data/RES' echo rsync $CMD ++ echo rsync -azurLptq -e ssh -i /root/.ssh/transfer --progress '--exclude=*BLABLAAAAAAA/ On voit deja plus haut que les " " ont disparus de la commande user@my.remote-server.com's password: ssh -i /root/.ssh/transfer user@my.remote-server.com date Tue Feb 1 04:10:54 PST 2011 Donc on exclue le probleme de conenxion ssh clé ou autre c'est bien un souci de scripting :( De même le fichier généré (le CSV) contient la ligne suivante: KO;02/01/11 12:54;;test-script.sh;-azurLptq -e ssh -i /root/.ssh/transfer --progress --exclude=*blablabla /data/RES/blabla user@my.remote-server.com:/data/res/ on constate la encore que les "" relatifs a la commande ssh ont encore disparus!! les bougres! Donc si quelqu'un a une idée je suis tout preneur

AltStyle によって変換されたページ (->オリジナル) /