Bonjour,
Je me heurte à un problème que je peux contourner facilement, mais je voudrais savoir s'il existe une solution. Le problème vient de la manière de passer des arguments avec espaces à une commande appelée par un script bash. La difficulté vient dans la construction conditionnelle de la chaîne qui contient les arguments, et le fait de faire distinguer à bash l'espace et le séparateur d'arguments. L'extrait du programme :
#!/bin/bash
set -e
COWBUILDER_OPTS="--autocleanaptcache --debootstrap=cdebootstrap"
REQUESTED_DIST=lucid
case $REQUESTED_DIST in
# universe is required for ubuntu
hardy|jaunty|karmic|lucid|maverick)
COWBUILDER_OPTS+=" --components=\"main universe\""
;;
esac
for opt in $COWBUILDER_OPTS; do echo $opt; done
Le résultat :
$ ./script
--autocleanaptcache
--debootstrap=cdebootstrap
--components="main
universe"
Le résultat recherché :
$ ./script
--autocleanaptcache
--debootstrap=cdebootstrap
--components="main universe"
J'ai évidement essayé les divers échappement possibles, trouvé plusieurs bonnes descriptions du problème (comme [1]), mais aucune solution pour construire correctement ma ligne de commande selon certaines conditions comme l'exemple l'illustre.
[1] http://wiki.bash-hackers.org/syntax/quoting
Merci d'avance pour votre aide.
# en changeant de séparateur
Posté par gaaaaaAab . Évalué à 2.
[^] # Re: en changeant de séparateur
Posté par niol (site web personnel) . Évalué à 1.
# array/liste
Posté par NBaH . Évalué à 4.
cowbuilderOpts=( --autocleanaptcache --debootstrap=cdebootstrap )
Tu devrais prendre l'habitude de ne pas nommer tes variables tout en majusculesrequestedDist=lucid
case $requestedDist in
# universe is required for ubuntu
hardy|jaunty|karmic|lucid|maverick)
cowbuilderOpts+=( --components="main universe" )
;;
esac
for opt in "${cowbuilderOpts[@]}"; do echo $opt; done
[^] # case pour une seule condition ?
Posté par NBaH . Évalué à 2.
ira bien.[\[ $requestedDist =~ hardy|jaunty|karmic|lucid|maverick ]] && cowbuilderOpts+=( --components="main universe" )
PS: j'ai ajouté une \ entre les crochets pour les mettre en évidence, mais elle ne doit pas figurer dans le code !
[^] # Re: case pour une seule condition ?
Posté par niol (site web personnel) . Évalué à 1.
[^] # Re: case pour une seule condition ?
Posté par benoar . Évalué à 2.
[^] # Re: array/liste
Posté par niol (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.