ephaestos Posté(e) le 13 novembre 2006 Partager Posté(e) le 13 novembre 2006 Bonjour à tous. Je rencontre un problème avec une fonction BASH dont voici le code : function dateformat { typeset -i RESULT=255 FORMAT=${1:-''} COMMAND="/usr/local/bin/date +$FORMAT" THE_DATE=`$COMMAND` RESULT=${?} if [[ ${RESULT} -ne 0 ]]; then echo -e "In file ${BASH_SOURCE} at line ${LINENO}: Failed to format date using command '${COMMAND}'." else echo "${THE_DATE}" fi return ${RESULT} } J'exécute ensuite la fonction via ces deux lignes : dateformat '%Y' dateformat '%Y %d' Dans le 1er cas, ca fonctionne correctement. Par contre dans le 2ème cas, le %d après l'espace est interpréré comme étant un second argument... J'ai également testé avec l'appel suivant : dateformat "'%Y %d'" Sans succès... Y-a-t'il quelq'un pour m'aider ? Merci bien Lien vers le commentaire Partager sur d’autres sites More sharing options...
tyrann27 Posté(e) le 13 novembre 2006 Partager Posté(e) le 13 novembre 2006 Et si tu utilises dans ton script $@ ou $* ca n'irait pas mieux? J'avoue que je ne sais plus lequel est celui qui donne tous les arguments mais je crois que c'est $* Lien vers le commentaire Partager sur d’autres sites More sharing options...
ephaestos Posté(e) le 13 novembre 2006 Auteur Partager Posté(e) le 13 novembre 2006 Et si tu utilises dans ton script $@ ou $* ca n'irait pas mieux? J'avoue que je ne sais plus lequel est celui qui donne tous les arguments mais je crois que c'est $* Merci, je vais tester. La différence entre $@ et $* est subtile : Si tu fait "$*" tu as une string contenant tous les parametres d'une fonction (ou d'un script), espacée du premier caractère de la variable d'environement $IFS et entourée du caractère ". Tandis que "$@" te donne n strings entourées du caractère ", avec n étant le nombre de paramètres de la fonction / script. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ephaestos Posté(e) le 13 novembre 2006 Auteur Partager Posté(e) le 13 novembre 2006 Arf, ça ne fonctionne pas mieux. Vois les traces de debug : + DATE=/usr/local/bin/date + dateformat '%Y %d' + typeset -i RESULT=255 + FORMAT='%Y %d' + COMMAND='/usr/local/bin/date +%Y %d' ++ /usr/local/bin/date +%Y %d /usr/local/bin/date: extra operand `%d' Try `/usr/local/bin/date --help' for more information. + THE_DATE= + RESULT=1 + [[ 1 -ne 0 ]] + echo 'In file ./main.bash at line 42: Failed to format date using command '\''/usr/local/bin/date +%Y %d'\''.' In file ./main.bash at line 42: Failed to format date using command '/usr/local/bin/date +%Y %d'. + return 1 + exit Celle là c'est quand j'appelle la fonction avec le parametre '%Y %d' + DATE=/usr/local/bin/date + dateformat ''\''%Y %d'\''' + typeset -i RESULT=255 + FORMAT=''\''%Y %d'\''' + COMMAND='/usr/local/bin/date +'\''%Y %d'\''' ++ /usr/local/bin/date '+'\''%Y' '%d'\''' /usr/local/bin/date: extra operand `%d\'' Try `/usr/local/bin/date --help' for more information. + THE_DATE= + RESULT=1 + [[ 1 -ne 0 ]] + echo 'In file ./main.bash at line 42: Failed to format date using command '\''/usr/local/bin/date +'\''%Y %d'\'''\''.' In file ./main.bash at line 42: Failed to format date using command '/usr/local/bin/date +'%Y %d''. + return 1 + exit Et là c'est quand j'appelle la fonction avec le parametre "'%Y %d'" En fait dans le premier cas, on vois bien que l'espace du paramètres est interprété comme un second paramètre. Et dans le 2ème cas, les ' utilisées pour regrouper les deux parties du paramètre sont "echapées" donc non interprétées. Vraiment étrange... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 13 novembre 2006 Partager Posté(e) le 13 novembre 2006 Bonjour à tous. Je rencontre un problème avec une fonction BASH dont voici le code : FORMAT=${1:-''} COMMAND="/usr/local/bin/date +$FORMAT" THE_DATE=`$COMMAND` Ça fonctionne en remplaçant par ça : RESULT=`/usr/local/bin/date +"$1"` Pourquoi, je n'en sais rien exactement. Possible que ce soit à cause des imbrications de quotes. ++ /bin/date '+%Y %d' ++ /bin/date '+"%Y' '%d"' On voit bien la différence. Hors sujet : Tu l'as recompilé ton date ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
ephaestos Posté(e) le 14 novembre 2006 Auteur Partager Posté(e) le 14 novembre 2006 Merci pour ta réponse. En fait je souhaite avoir une variable pour stocker une commande pour pouvoir soit l'afficher, soit l'exécuter. Je souhaite utiliser une variable afin d'eviter d'avoir deux fois la commande car ça veux dire pense à modifier les deux endrois lors d'une mise à jour -> 99% de chance d'oublier... Note: Je n'ai pas recompilé date, je travaille sous Solaris 8 sur lequel est installé les outils GNU dans /usr/local/bin en plus des outils POSIX Unix dans /usr/xpg4/bin. Comme je souhaite assurer la portabiliter vers Linux j'utilise les outils GNU (qui offrent par ailleurs bien plus de possibilitées) Lien vers le commentaire Partager sur d’autres sites More sharing options...
ephaestos Posté(e) le 14 novembre 2006 Auteur Partager Posté(e) le 14 novembre 2006 J'ai trouvés un moyen de contournement. C'est pas très joli, mais ça fonctionne. En fait je replace les espaces du format de la date par l'equivalent en héxa. Cette valeur n'est ensuite interprétée que par la commande echo et pas par par la commande date. dateformat '%Y\x20%d' PS: Bien sûr il ne faut pas non plus oublier de spécifier le paramètre -e à la commande echo, sinon le caractère l'echapement \x n'est pas interprété... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 14 novembre 2006 Partager Posté(e) le 14 novembre 2006 Note: Je n'ai pas recompilé date, je travaille sous Solaris 8 sur lequel est installé les outils GNU dans /usr/local/bin en plus des outils POSIX Unix dans /usr/xpg4/bin. Comme je souhaite assurer la portabiliter vers Linux j'utilise les outils GNU (qui offrent par ailleurs bien plus de possibilitées) Tu m'étonnes...Plus il y a de gnu, moins on est emmerdé Moi aussi je met plein de gnu sur les solaris J'ai trouvés un moyen de contournement. C'est pas très joli, mais ça fonctionne.En fait je replace les espaces du format de la date par l'equivalent en héxa. Cette valeur n'est ensuite interprétée que par la commande echo et pas par par la commande date. dateformat '%Y\x20%d' PS: Bien sûr il ne faut pas non plus oublier de spécifier le paramètre -e à la commande echo, sinon le caractère l'echapement \x n'est pas interprété... Pas bête. Dans ce cas puis-je te suggérer un FORMAT=$(echo ${1:-''} | sed 's/ /\\x20/g') Histoire de ne pas avoir à le faire pour chaque appel. EDIT : copier coller. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ephaestos Posté(e) le 14 novembre 2006 Auteur Partager Posté(e) le 14 novembre 2006 Super, c'est exactement ce que je souhaitais faire ! Merci beaucoup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 14 novembre 2006 Partager Posté(e) le 14 novembre 2006 No prolbem. Tu sais que tu n'es pas obligé de tout citer à chaque fois, ça fait un peu lourd pour un post où tu ne fais que rajouter deux lignes. Sinon EDIT : un peu de ménage. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ephaestos Posté(e) le 14 novembre 2006 Auteur Partager Posté(e) le 14 novembre 2006 Tu sais que tu n'es pas obligé de tout citer à chaque fois, ça fait un peu lourd pour un post où tu ne fais que rajouter deux lignes. Gomen... je le ferais plus :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.