Bonjour,
J'aimerais continuer des lignes de codes sur plusieurs lignes tout en commentant .
Ex ne fonctionnant pas avec " \ ":
Code:
1
2
3
4 $ echo hello \ > \ # ceci est un commentaire hello # ceci est un commentaire $
Version imprimable
Bonjour,
J'aimerais continuer des lignes de codes sur plusieurs lignes tout en commentant .
Ex ne fonctionnant pas avec " \ ":
Code:
1
2
3
4 $ echo hello \ > \ # ceci est un commentaire hello # ceci est un commentaire $
Bonjour :coucou:
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:
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:
1
2
3
4 $ echo "toto > tata" toto tata
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:
1
2
3
4
5 apt-get install -y \ \ # terminal emulators terminator xfce4-terminal \ \ # display managers lightdm nodm
Le backslash n'est reconnu comme caractère de continuation qu'à la condition d'être à la fin de la ligne.
Comme déjà expliqué, tu n'écrirais pas ceci:Alors, il ne faut pas écrire ce que tu proposes.Code:apt-get install -y \ # terminal emulators terminator xfce4-terminal \ # display managers lightdm nodm
Quel est l'intérêt de mettre un commentaire dans une ligne de commande ?
salut,
la seule solution que je vois c'est de passer par un tableau :
Code:
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
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.
Bonjour,
Un exemple (mais cela consomme inutilement de la ressource juste pour un commentaire ligne à ligne pour des paramètres de commande):
En principe, on commente le fonctionnement de la commande dans sa globalité pas paramètre par paramètre.Code:
1
2
3
4
5 echo toto \ `# commentaire 1` \ titi \ `# commentaire 2` \ tutu
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.
:weird:
yep possible, hésite pas à montrer comment, comme dit moi c'est la seule que j'ai trouvéCitation:
Ce n'est pas la seule solution. On peut passer par des fichiers ou des heredocs.
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êmeCitation:
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 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
Solution simple (simplette?) : comme le dit BufferBob, on peut faire plusieurs "apt-get install" et là plus besoins des anti slashes.
Code:
1
2
3 apt-get install -y terminator xfce4-terminal # terminal emulators apt-get install -y lightdm nodm # display managers
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 :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#FTN.AEN7211
------Citation:
Envoyé par http://tldp.org/LDP/abs/html/commandsub.html#BACKQUOTESREF
BufferBob= ta solution avec tableau me parait la plus abordable :mrgreen:
Moi aussi ça m'intéresse .. :weird:Citation:
Envoyé par BufferBob
Et en plus complet (qui montre que <<<,$(...) et `...` lance leur propre shell:Code:
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
Code:
1
2 $ cat <<<`echo $(ps -eo ppid,pid,comm | grep [b]ash)` 1195 1197 bash 1197 12531 bash 12531 12532 bash 12532 12533 bash
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 ?
Ben ça tombe bien qu'on soit à deux doigts de le dire, puisque c'est la vérité !Citation:
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
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.
Personnellement, j'aime bien mettre les listes dans des fichiers. (1 enregistrement par ligne)Citation:
yep possible, hésite pas à montrer comment,
Imaginons le fichier paquetsdechirantleurmere.txt suivant:
On peut imaginer un traitement comme ceci:Code:
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 retirera le "echo" du milieu si on est satisfait du traitement proposé.Code:
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é.
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:
Les heredocs sont pris comme fichiers. J'aurais pu reprendre la syntaxe précédente mais il faut montrer différentes possibilités.Code:
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é.
:ccool: Bon courage !
il y a celle là aussi, à base de heredocument :
ou encore le très hackish à tendance Perl-esque :Code:
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 plus sobrement encore on pourrait envisager de stocker la liste dans un fichier à part...Code:
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
edit: ah ben... pris de vitesse par Flodelarab
Si on remplace l'espace dans les commentaires par un souligné '_' par exemple, on peut tricher de la sorte :aie::
Code:
1
2
3
4
5
6 echo toto \ ${le_premier_commentaire##*} \ titi \ ${le_second_commentaire##*} \ tutu toto titi tutu
Ah oui. On peut tricher même en laissant les espaces:
Code:
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