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

  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 424
    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 424
    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 871
    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 871
    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 424
    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 424
    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 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    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)

  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 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,

  7. #7
    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,

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    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"

  9. #9
    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
    Bonjour N_BaH
    Dans le Makefile, ca fonctionnait pas, mais j'ai trouvé la solution en retirant les acolades, c'est encore plus KISS:

    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/.*: //p' | sort -V | tail -1)-slim
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    en effet, les accolades ne sont plus utiles ici.

    quelle est ta version de Linux, et celle de sed qui y est installée ?
    et il n'y a que dans un makefile que les accolades ne fonctionnent pas ?

  11. #11
    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
    Oui, dans le Makefile, avec les accolades, ça ne fonctionne pas.
    En ligne de commande, ça fonctionne avec et sans accolades.
    En plus, je suis obliger de lancer la commande avec un $(shell ...) sinon, la variable n'est pas affecté.

    Cordialement,
    vandman

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    il y a peut-être "un problème" avec ta version de sed (que tu ne nous as toujours pas indiquée), parce que je n'ai aucune erreur avec ce code simple comportant des accolades dans la commande sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PERL_TAG ?= $(shell curl -s https://raw.githubusercontent.com/Perl/docker-perl/master/config.yml \
    			| sed -n '/version:/{s/.*: //p}' \
    			| sort -V \
    			| tail -1 \
    		)-slim
    target:
    	@echo $(PERL_TAG)

+ 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, 21h19
  2. Arrêter une commande PING si trop longue
    Par tissard dans le forum Langage
    Réponses: 2
    Dernier message: 02/04/2010, 16h27
  3. Réponses: 2
    Dernier message: 04/12/2009, 15h42
  4. une commande dans Makefile
    Par lazo61 dans le forum Systèmes de compilation
    Réponses: 1
    Dernier message: 21/02/2009, 12h31
  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, 18h41

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