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 :

Ligne continue avec commentaire


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut Ligne continue avec commentaire
    Bonjour,

    J'aimerais continuer des lignes de codes sur plusieurs lignes tout en commentant .

    Ex ne fonctionnant pas avec " \ ":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo hello \
    > \ # ceci est un commentaire   
    hello  # ceci est un commentaire
    $

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    Ton exemple fonctionne très bien.
    C'est plutôt que ce que tu fais n'est pas clair pour toi.

    • "echo" se moque des retours à la ligne si tu ne lui dis pas d'interpréter les contre-obliques.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      $ echo "toto\ntata"
      toto\ntata
      $ echo -e "toto\ntata"
      toto
      tata
    • Même en interprétant les contre-obliques, tu demandes à "echo" de t'afficher "hello" puis "ceci est un commentaire", ce qu'il fait. La contre-oblique en fin de ligne permet seulement de continuer la ligne en dessous comme si elle était une seule ligne. Il n'y a donc aucune raison qu'il la coupe en deux.
    • Si tu veux protéger des retours à la ligne, utilise plutôt des guillemets protecteurs.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      $ echo "toto
      > tata"
      toto
      tata
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Bon, mon exemple était foireux , je reprend :

    En fait j'ai parfois un tas de paquet à installer et j'aimerais ecrire quelque chose dans ce genre là pour que ça soit compréhensible , mais backslash interpréte le commentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     apt-get install -y \
    \ # terminal emulators
      terminator xfce4-terminal \
    \ # display managers
      lightdm nodm

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Le backslash n'est reconnu comme caractère de continuation qu'à la condition d'être à la fin de la ligne.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Comme déjà expliqué, tu n'écrirais pas ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     apt-get install -y \ # terminal emulators  terminator xfce4-terminal \ # display managers  lightdm nodm
    Alors, il ne faut pas écrire ce que tu proposes.

    Quel est l'intérêt de mettre un commentaire dans une ligne de commande ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Le backslash n'est reconnu comme caractère de continuation qu'à la condition d'être à la fin de la ligne.
    C'est pour cela que je cherche une alternative .

  7. #7
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Quel est l'intérêt de mettre un commentaire dans une ligne de commande ?
    C'est pour un script .

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    la seule solution que je vois c'est de passer par un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pkg=(
       # bla bla blablabla bla
       socat
       elyxer
       # blablabla blabla blablabla
       popa3d mdf2iso
    )
    apt-get install -s ${pkg[@]}
    (...)
    Les NOUVEAUX paquets suivants seront installés*:
      elyxer mdf2iso popa3d socat

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Du calme. Ce n'est pas la seule solution. On peut passer par des fichiers ou des heredocs.

    Mais le but n'est toujours pas défini.
    Car lors de l'exécution d'un script, on se moque pas mal des commentaires.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Mais le but n'est toujours pas défini.
    Car lors de l'exécution d'un script, on se moque pas mal des commentaires.
    -------------
    Le but :
    J'aimerais continuer d'écrire des lignes de codes sur plusieurs lignes tout en commentant .

    On se moque pas des com lors de la lecture du fichier ( 3 km de nom de paquets logiciel ) .

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,

    Un exemple (mais cela consomme inutilement de la ressource juste pour un commentaire ligne à ligne pour des paramètres de commande):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo toto \
    `# commentaire 1` \
    titi \
    `# commentaire 2` \
    tutu
    En principe, on commente le fonctionnement de la commande dans sa globalité pas paramètre par paramètre.

    Pour bien te rendre compte du problème de la solution ci-dessus, dis-toi que pour la commande echo de l'exemple qui ne fait qu'afficher 3 paramètres, elle lance 2 shell qui ne font rien d'autre qu’interpréter un commentaire.
    Cordialement.

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Du calme.


    Ce n'est pas la seule solution. On peut passer par des fichiers ou des heredocs.
    yep possible, hésite pas à montrer comment, comme dit moi c'est la seule que j'ai trouvé

    Mais le but n'est toujours pas défini.
    Car lors de l'exécution d'un script, on se moque pas mal des commentaires.
    hmm.. sauf qu'en disant ça on est à deux doigts de dire que de manière générale les commentaires ne servent à rien quand même

    le but me parait pourtant simple; le PO a une liste de paquets qu'il veut installer, la liste est commentée de manière à pouvoir s'y retrouver et probablement la modifier par la suite, ça a du sens vu d'ici, même si la méthode n'est pas très orthodoxe (il pourrait probablement faire plusieurs apt-get install séparés, plus besoin de s'emmerder, voire utiliser un tool de déploiement ou un autre) mais bon, il fait bien comme il veut après tout, et -sans dire que ce soit toujours fait exprès- le fait de n'être pas exhaustif sur les différentes solutions permet aussi de laisser de la place aux p'tits copains qui veulent contrib

  13. #13
    Membre habitué Avatar de RaphaelG
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2016
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 94
    Points : 183
    Points
    183
    Par défaut
    Solution simple (simplette?) : comme le dit BufferBob, on peut faire plusieurs "apt-get install" et là plus besoins des anti slashes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    apt-get install -y terminator xfce4-terminal # terminal emulators
    apt-get install -y lightdm nodm # display managers
    IMHO, you should RTFM ASAP. IHTH.

  14. #14
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Pour bien te rendre compte du problème de la solution ci-dessus, dis-toi que pour la commande echo de l'exemple qui ne fait qu'afficher 3 paramètres, elle lance 2 shell qui ne font rien d'autre qu’interpréter un commentaire.
    Peux-tu m'expliquer pourquoi 2 shell d'aprés toi se lancent avec backquotes ?
    Parce que je ne comprends pas la note de la doc :
    Citation Envoyé par http://tldp.org/LDP/abs/html/commandsub.html#FTN.AEN7211
    [2]
    In a more technically correct sense, command substitution extracts the stdout of a command, then assigns it to a variable using the = operator.
    In a more technically correct sense : Est-ce une recommendation ou une régle ?
    Citation Envoyé par http://tldp.org/LDP/abs/html/commandsub.html#BACKQUOTESREF
    Command substitution reassigns the output of a command [1] or even multiple commands; it literally plugs the command output into another context. [2]
    ------

    BufferBob= ta solution avec tableau me parait la plus abordable

    Citation Envoyé par BufferBob
    Ce n'est pas la seule solution. On peut passer par des fichiers ou des heredocs.
    yep possible, hésite pas à montrer comment, comme dit moi c'est la seule que j'ai trouvé
    Moi aussi ça m'intéresse ..

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ ps -eo ppid,pid,comm | grep [b]ash
     1195  1197 bash
    $ echo `ps -eo ppid,pid,comm | grep [b]ash`
    1195 1197 bash 1197 12517 bash
    Et en plus complet (qui montre que <<<,$(...) et `...` lance leur propre shell:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ cat <<<`echo $(ps -eo ppid,pid,comm | grep [b]ash)`
    1195 1197 bash 1197 12531 bash 12531 12532 bash 12532 12533 bash
    Cordialement.

  16. #16
    Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Septembre 2015
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Septembre 2015
    Messages : 175
    Points : 62
    Points
    62
    Par défaut
    disedorgue: merci
    ------
    La methode tableau est approprié à l'exemple apt-get .

    Mais en général y-a-t-il d'autres methodes que backquotes ?

  17. #17
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    hmm.. sauf qu'en disant ça on est à deux doigts de dire que de manière générale les commentaires ne servent à rien quand même
    Ben ça tombe bien qu'on soit à deux doigts de le dire, puisque c'est la vérité !
    Les commentaires ne servent à rien en phase d'exécution.
    Ils servent à la maintenance du script.
    Encore, il aurait été question d'un affichage pour savoir quel paquet va être installé afin de suivre l'exécution... mais même pas. codezero1 n'a pas poussé dans ce sens.
    Ces commentaires, il peut bien les écrire en dessus, ou en dessous, de la ligne vraiment exécutée. C'est pas très grave.

    Une autre façon de le dire est qu'il n'existe pas de commentaire /* */ (C++) mais seulement des commentaires // (C++) écrits avec un croisillon # (bash) qui invalident toute la fin de ligne.

    yep possible, hésite pas à montrer comment,
    Personnellement, j'aime bien mettre les listes dans des fichiers. (1 enregistrement par ligne)
    Imaginons le fichier paquetsdechirantleurmere.txt suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #liste des paquets à installer
     
    #paquet de test
    test
    #paquet de bigard
    #a effacer
    bigard
     
    #autre a venir
    On peut imaginer un traitement comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ sed 's/#.*//;/^$/d' paquetsdechirantleurmere.txt | while read ligne; do echo "$ligne va être installé";echo "apt-get install $ligne";echo -e "$ligne a été installé.\n";done
    test va être installé
    apt-get install test
    test a été installé.
     
    bigard va être installé
    apt-get install bigard
    bigard a été installé.
    On retirera le "echo" du milieu si on est satisfait du traitement proposé.

    Certains diront que c'est plus propre.
    D'autres diront que ça démultiplie le nombre de fichiers.
    On proposera donc une solution avec des heredocs mêlant la liste des paquets commentés et le script.

    Exemple:
    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
    19
    $ while read ligne; do echo "$ligne va être installé";echo "apt-get install $ligne";echo -e "$ligne a été installé.\n";done < <(sed 's/#.*//;/^$/d' <<EOF
    > #liste des paquets à installer
    >
    > #paquet de test
    > test
    > #paquet de bigard
    > #a effacer
    > bigard
    >
    > #autre a venir
    > EOF
    > )
    test va être installé
    apt-get install test
    test a été installé.
     
    bigard va être installé
    apt-get install bigard
    bigard a été installé.
    Les heredocs sont pris comme fichiers. J'aurais pu reprendre la syntaxe précédente mais il faut montrer différentes possibilités.

    Bon courage !
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  18. #18
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    il y a celle là aussi, à base de heredocument :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    apt-get install -s $(grep -Pv "^[ \t]*#" <<EOF | xargs
    # blablabla
    socat
    elyxer
    # bla blabla
    mdf2iso popa3d
    EOF
    )
    ou encore le très hackish à tendance Perl-esque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    apt-get install -s $(awk 'BEGIN{ORS=" "} /^__DATA__$/ {seen=1;next} seen==1 && !/^#/ {print} END {print "\n"}' $0)
    (...)
    exit 0
     
    __DATA__
    # blablabla
    socat
    elyxer
    # bla blabla
    mdf2iso popa3d
    ou plus sobrement encore on pourrait envisager de stocker la liste dans un fichier à part...

    edit: ah ben... pris de vitesse par Flodelarab

  19. #19
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Si on remplace l'espace dans les commentaires par un souligné '_' par exemple, on peut tricher de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo toto \
    ${le_premier_commentaire##*} \
    titi \
    ${le_second_commentaire##*} \
    tutu
    toto titi tutu
    Cordialement.

  20. #20
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Ah oui. On peut tricher même en laissant les espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ echo toto \
    > $(# Qu'il est beau mon commentaire en bois\
    > )\
    > tata \
    > $(# Commentaire du bois Mesdames, commentaire du bois joli\
    > )
    toto tata
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2000] parcours de lignes de formulaire continue avec recordset
    Par mcfly37 dans le forum IHM
    Réponses: 1
    Dernier message: 25/05/2009, 08h50
  2. code lignes continues inefficace avec AutoExtend
    Par schwarzy2 dans le forum IHM
    Réponses: 4
    Dernier message: 19/03/2007, 18h18
  3. retour ligne intélligent avec l'utilisation de DIV
    Par bébé dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 22/08/2005, 17h46
  4. lignes 3d avec d3dx
    Par izbad dans le forum DirectX
    Réponses: 12
    Dernier message: 21/04/2005, 15h31
  5. Génération de lignes entières avec TEXT_IO.PUT
    Par ludo.guy dans le forum Oracle
    Réponses: 9
    Dernier message: 13/10/2004, 15h28

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