IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[Shell] Problème avec le Back-quote (ksh)


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut [Shell] Problème avec le Back-quote (ksh)
    Bonjour,
    Alors voici mon problème dans un script unix (ksh) :
    1. dans une fonction je défini 2 variables :
    var1="PRCRP.PCRRP.REFAPF.[0-9][0-9][0-9].D[0-9][0-9][0-9][0-9][0-9][0-9].RECU"
    var2="reception"
    Elle doit servir à faire un ls plus loin.

    2. De retour dans le programme principe, si je fais un echo de ma variable je retrouve bien le résultat

    3. Je code la ligne suivante :
    Resultat=`NomFichier ${var2} ${var1}`
    (NomFichier étant une autre fonction perso).

    Cette instruction a bien marché pendant un certain temps, mais depuis qqs jours, pour une raison que je ne comprends pas, var1 est "interprété" dans la ligne de commande définissant "Resultat" de sorte que la fonction NomFichier reçoit :
    PRCRP.PCRRP.REFAPF.006.D150108.RECU
    au lieu de :
    PRCRP.PCRRP.REFAPF.[0-9][0-9][0-9].D[0-9][0-9][0-9][0-9][0-9][0-9].RECU
    (rq : il s'agit d'un masque sur un fichier, le fichier "PRCRP.PCRRP.REFAPF.006.D150108.RECU" a existé, mais de toutes façon il n'existe plus a ce jour ...)

    ... et pour faire simple, si j'utilise le même script avec :
    var1="PRCRP.PCRRP.CERPFT.[0-9][0-9][0-9].D[0-9][0-9][0-9][0-9][0-9][0-9].RECU"
    ça marche très bien (par d'interprétation).

    Alors, j'ai une solution pour que ça marche de nouveau :
    Resultat=`NomFichier "${var2}" "${var1}"`

    mais je ne comprends pas pourquoi j'ai eu "soudain" ce changement de comportement : donc si qqn à une explication ...

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Si "var1" contient un métacaractère (ou une combinaison regex) style "*" ou "?" ou "[0-9]" ben lorsque ton script shell appelle la fonction "NomFichier" et qu'il évalue "var1" il remplace tous les métacaractères par les noms de fichiers présents dans ton répertoire au moment de l'appel et dont le nom correspond au modèle.
    Donc comme ton environnement évolue, un jour il y a des fichiers qui correspondent et la fonction "NomFichier" reçoit ces fichiers là en paramètre, un autre jour il n'y a pas de fichier
    le fichier "PRCRP.PCRRP.REFAPF.006.D150108.RECU" a existé, mais de toutes façon il n'existe plus a ce jour
    et là, le shell ne pouvant pas expander le métacaractère le passe tel quel à ta fonction.

    En protégeant ta variable entre doubles quottes, les métacaractères ne sont plus expandés et ce quel que soit ton environnement.

    Démo: tape echo * puis ensuite echo "*"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci pour la réponse.
    Je pensais à qqc comme cela.
    Ce qui me trouble c'est que le fichier "PRCRP.PCRRP.REFAPF.006.D150108.RECU" n'existe plus et que dans mon appel, var1 continue d'être évaluer avec la valeur PRCRP.PCRRP.REFAPF.006.D150108.RECU ...
    Petite précision : le script est lancé depuis un Control-M (outils de plannification) ... Je vais contrôler : peut-être que je ne regarde pas dans le bon répertoire et qu'un fichier PRCRP.PCRRP.REFAPF.006.D150108.RECU "traine" ...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bob94700 Voir le message
    Petite précision : le script est lancé depuis un Control-M (outils de plannification) ... Je vais contrôler
    En insérant "pwd" en début de ton script tu verras dans quel répertoire il bosse

    Citation Envoyé par bob94700 Voir le message
    : peut-être que je ne regarde pas dans le bon répertoire et qu'un fichier PRCRP.PCRRP.REFAPF.006.D150108.RECU "traine" ...
    find / -name "PRCRP.PCRRP.REFAPF.006.D150108.RECU" -print
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. script shell: problème avec le caractère espace
    Par Le fut dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/05/2017, 11h49
  2. Réponses: 2
    Dernier message: 24/08/2007, 20h17
  3. Sudo problème avec les simples quotes
    Par Tronche dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/03/2007, 12h02
  4. [MySQL] Problème avec un double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2007, 14h44
  5. problème avec history-back
    Par renaud26 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 18/01/2006, 08h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo