Forum Programmation.shell desactivation de l'expansion

Posté par  .
Étiquettes : aucune
0
29
juil.
2007
Bonjour,

Je souhaite désactiver l'expansion du path dans une variable.

Voici mon script:
OPTION=" -I /var/*"
ma_commande ${OPTION}

Or quand j'exécute ce script, les options passées à «ma_commande» sont le résultat de l'expansion de /var/*, ce qui fait que c'est la commande suivante qui est exécutée:
ma_commande -I /var/run /var/lib /var/log

Comment faire en sorte que l'expansion du path n'ait pas lieu ?

En espérant avoir été clair.
Merci.
  • # facile

    Posté par  . Évalué à 1.

    suffit de ne pas mettre le *

    OPTION=" -l /var/"
    ma_commande ${OPTION}
    • [^] # Re: facile

      Posté par  . Évalué à 1.

      Suffit aussi de ne pas exécuter la commande !

      Mon script à besoin du *
  • # remettre des guillemets

    Posté par  . Évalué à 1.

    OPTION="\" -s /var/*\""

    Et voilà !
    • [^] # Re: remettre des guillemets

      Posté par  . Évalué à 1.

      Ça ne marche pas, car dans ce cas l'argument que reçoit ma_commande est " -s /var/*" or j'ai besoin que l'argument soit -s /var/* (sans les guillemets).
      • [^] # Re: remettre des guillemets

        Posté par  . Évalué à 1.

        la question à se poser est peut-etre lors
        pourquoi utiliser * dans ton argument...
        si tu ne veux pas étendre le chemin...
        • [^] # Re: remettre des guillemets

          Posté par  . Évalué à 1.

          Par ce que sans * la commande ne fait pas ce que je veux qu'elle fasse.

          Je viens de trouver une solution par très satisfaisante: utiliser set -f pour désactiver l'expansion des chemins.

          OPTION=" -I /var/*"
          set -f
          ma_commande ${OPTION}
          set +f

          Je pensais juste pouvoir trouver quelque chose de plus élégant, par ce que là je suis obliger de désactiver l'expansion pour toute la commande et non pas juste pour le contenu de la variable OPTION.
          • [^] # Re: remettre des guillemets

            Posté par  . Évalué à 1.


            Par ce que sans * la commande ne fait pas ce que je veux qu'elle fasse.


            et utiliser un autre caractere que le * ne serait pas possible ?
            vu que visiblement c'est TA_commande, tu peux surement utiliser un autre argument.
          • [^] # Re: remettre des guillemets

            Posté par  . Évalué à 1.


            Je viens de trouver une solution par très satisfaisante: utiliser set -f pour désactiver l'expansion des chemins.

            OPTION=" -I /var/*"
            set -f
            ma_commande ${OPTION}
            set +f

            Je pensais juste pouvoir trouver quelque chose de plus élégant, par ce que là je suis obliger de désactiver l'expansion pour toute la commande et non pas juste pour le contenu de la variable OPTION.


            peut-etre simplement en echappant le *


            OPTION=" -I /var/\*"
            ma_commande ${OPTION}
            • [^] # Re: remettre des guillemets

              Posté par  . Évalué à 1.

              ma_commande c'est dar pour faire des sauvegardes.

              Échapper l'* ne marche pas non plus.
              • [^] # Re: remettre des guillemets

                Posté par  . Évalué à 1.

                d'apres
                http://dar.linux.free.fr/doc/man/dar.html

                le -l /var/* serait pour lister le contenu de /var/ contenu dans l'archive

                peut-etre alors faire la ligne de commande


                OPTION="-l /var/"
                ma_commande ${OPTION}*
                • [^] # Re: remettre des guillemets

                  Posté par  . Évalué à 1.

                  Mon exemple était juste pour illustrer mes propos, je ne voulais pas copier mes 15 lignes de scripts.

                  J'ai besoin de cette *.

                  La solution «débrouille toi sans l'* n'est pas une solution». Le jour où tu as un problème avec Linux, plutôt que d'essayer de le résoudre, tu le contournes en passant sous Windows ?
                  • [^] # Re: remettre des guillemets

                    Posté par  . Évalué à 1.

                    je suppose surtout que ton * il te sert à dire à dar de faire l'expansion du /var/

                    donc soit tu regardes à mettre le * plus loin

                    soit tu essaye differemment.

                    tu as essayé le

                    OPTION="-l /var/*"
                    ma_commande $OPTION


                    sans les {} ce qui eviteraitde le faire executer par le shell avant ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.