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

Shell et commandes GNU Discussion :

Makefile: longue commande


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut Makefile: longue commande
    Bonjour,

    Je cherche à exécuter l'affectation de la variable PERL_TAG dans un Makefile, mais ça marche pas, je pense que c'est du au sous-shell successif et à la manière dont sont interpréter les variables dans la commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SHELL:=/bin/bash
    export
     
    .SHELLFLAGS += -e
     
    PERL_TAG?=$(echo $(echo $(echo "{"; i=1; for version in $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | grep ' version: ' | cut -d ':' -f 2 | tr -d ' '); do echo "\"version${i}\": \"${version}\",";((i=i+1)); done ; echo "\"version0\": \"0\""; echo "}") | jq -r '.| to_entries | max_by(.value) | .value')-slim)
     
    ifndef DEBUG
    .SILENT:
    endif
     
    .PHONY: *
    Dans un shell, le code suivant donne bien la réponse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $(echo $(echo "{"; i=1; for version in $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | grep ' version: ' | cut -d ':' -f 2 | tr -d ' '); do echo "\"version${i}\": \"${version}\",";((i=i+1)); done ; echo "\"version0\": \"0\""; echo "}") | jq -r '.| to_entries | max_by(.value) | .value')-slim

    ps: Je veux bien un rappel sur l'utilisation des variables et leur affectation dans un Makefile.

    Merci d'avance

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Moi ce que je n'arrive pas à comprendre, c'est ce echo $(echo $(echo truc)). C'est pas plus simple avec echo truc directement ? En tout cas en bash ça l'est. Après peut-être que "make" joue un rôle en plus qui fait que...
    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]

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Par défaut
    Après peut-être que "make" joue un rôle en plus qui fait que...
    Ou tout simplement spécifique au fonctionnement de make.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERL_TAG?=$(echo $(echo $(echo "{"; i=1; for version in $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | grep ' version: ' | cut -d ':' -f 2 | tr -d ' '); do echo "\"version${i}\": \"${version}\",";((i=i+1)); done ; echo "\"version0\": \"0\""; echo "}") | jq -r '.| to_entries | max_by(.value) | .value')-slim)
    que c'est tortueux !

    KISS! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERL_TAG ?= $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | sed -n '/version:/{s/.*: //;s/$/-slim/p}' | sort -V | tail -1)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERL_TAG?=$(echo $(echo $(echo "{"; i=1; for version in $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | grep ' version: ' | cut -d ':' -f 2 | tr -d ' '); do echo "\"version${i}\": \"${version}\",";((i=i+1)); done ; echo "\"version0\": \"0\""; echo "}") | jq -r '.| to_entries | max_by(.value) | .value')-slim)
    que c'est tortueux !

    KISS! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERL_TAG ?= $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | sed -n '/version:/{s/.*: //;s/$/-slim/p}' | sort -V | tail -1)
    Je connaissais pas l'option -V de sort. Par contre, chez moi, dans le make, ca fonctionne pas.

    avec ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PERL_TAG ?= $(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | sed -n '/version:/{s/.*: //;s/$/-slim/p}' | sort -V | tail -1)
    Rien ne se passe.

    Avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERL_TAG ?= $(shell curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | sed -n '/version:/{s/.*: //;s/$/-slim/p}' | sort -V | tail -1)
    j'ai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    make build-manager
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    sed: -e expression n°1, caractère 30: commande «*s*» inachevée
    Clonage dans 'apache_httpd'...
    remote: Enumerating objects: 987, done.
    remote: Counting objects: 100% (224/224), done.
    remote: Compressing objects: 100% (141/141), done.
    remote: Total 987 (delta 95), reused 183 (delta 81), pack-reused 763
    Réception d'objets: 100% (987/987), 200.44 Kio | 4.89 Mio/s, fait.
    Résolution des deltas: 100% (434/434), fait.
    Apache HTTPD version is: 2.4.57
    Perl version is:
    Je pense que c'est du aux accolades '{}' qui doivent être traité par Make.

    Cordialement,

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    il peut aussi manquer un ; après le p.

    quelle est ta version de Linux, et celle de sed qui y est installée ?

    PS: il me semblait avoir fait un edit de mon message pour que le code soit encore plus KISS!; je le remets ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PERL_TAG ?= "$(curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml | sed -n '/version:/{s/.*: //p;}' | sort -V | tail -1)-slim"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Moi ce que je n'arrive pas à comprendre, c'est ce echo $(echo $(echo truc)). C'est pas plus simple avec echo truc directement ? En tout cas en bash ça l'est. Après peut-être que "make" joue un rôle en plus qui fait que...
    Bonjour,
    Je me prenais la tête à reconstruire un Json car le Yalm avec jq donnait un mélange d'objet et de tableau prise de tête à gérer.
    J'ai trouvé plus simple de fabriquer un Json qui fonctionne avec jq.

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Makefile et commande ar
    Par Javabad dans le forum Débuter
    Réponses: 2
    Dernier message: 07/03/2011, 20h19
  2. Arrêter une commande PING si trop longue
    Par tissard dans le forum Langage
    Réponses: 2
    Dernier message: 02/04/2010, 15h27
  3. Réponses: 2
    Dernier message: 04/12/2009, 14h42
  4. une commande dans Makefile
    Par lazo61 dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 21/02/2009, 11h31
  5. Ligne de commande trop longue + Windows 2000
    Par Sylmandel dans le forum Général Java
    Réponses: 6
    Dernier message: 10/05/2006, 17h41

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