Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 22-03-2020 19:54:21

le_lutin
Membre
Lieu : Alsace
Distrib. : Debian 10 Buster
Noyau : 4.19.0-10-amd64
(G)UI : Gnome
Inscription : 01-11-2019

[RÉSOLU] Question pipe et Mailman

Bonjour,
J'utilise Mailman pour gérer des listes de diffusion.
J'essaie d'avoir une commande pour générer directement la liste de mes listes et le nombre d'abonnés de chacune, mais je sèche, aucune des suivantes ne fonctionne :

list_lists -b | list_members | wc -l
list_lists -b | list_members * | wc -l
list_lists -b > list_members | wc -l
list_lists -b >> list_members | wc -l


merci pour votre aide,
Belle soirée.

Dernière modification par le_lutin (23-03-2020 16:54:19)

Hors ligne

#2 22-03-2020 21:14:19

nlancien
Membre
Inscription : 17-07-2019

Re : [RÉSOLU] Question pipe et Mailman

Bonsoir,

Tu as un exemple de sortie de chacune de tes commandes?

list_lists -b | list_members | wc -l
Envoie la sortie de list_lists -b dans l'entrée de la commande list_members puis envoie le résultat vers wc qui va compter les lignes

list_lists -b >> list_members | wc -l
Ecrit la sortie de list_lists -b  a la fin (au besoin le créé) d'un fichier nommé list_members puis envoie le résultat vers wc qui va compter les lignes

Tu conviendras avec moi que ce n'est pas la même chose. scratchhead.gif
A vue de nez je vois pas pourquoi les deux dernières lignes te renverraient quelque chose d'intéressant.

EDIT Si je pose l'hypothése que tu veux enregistrer la sortie de list_lists -b dans un fichier ET compter les lignes :

list_lists -b | tee -a list_members | wc -l



Le tee va te permettre d'écrire le fichier, tout en laissant passer les données  vers l'entrée de wc -l

Dernière modification par nlancien (22-03-2020 21:24:39)

Hors ligne

#3 23-03-2020 10:59:13

le_lutin
Membre
Lieu : Alsace
Distrib. : Debian 10 Buster
Noyau : 4.19.0-10-amd64
(G)UI : Gnome
Inscription : 01-11-2019

Re : [RÉSOLU] Question pipe et Mailman

hello,
ah oui effectivement les deux dernières commandes ne donneront rien. Je ne souhaite pas passer par un fichier. (si possible)
Alors :
- list_lists donne la liste des listes qui existent. Exemple :

list_lists -b
camping
comite-ades
culture
demain
discussion
discussion-langenberg
gt-stages
investisseurs
mailman
membres-bevr
musicotherapie
scic
test
 


- list_members donne la liste des membres pour une liste. Exemple avec le comptage :

list_members camping | wc -l
12
 


Le problème se situe entre list_lists et list_members. Il me faudrait trouver le moyen pour qu'il prenne chaque liste une à une et pas tout en un seul bloc …
Lorsque je fais par exemple :

echo 'camping' | list_members


cela met en erreur la fonction list_members …

Hors ligne

#4 23-03-2020 13:32:56

nlancien
Membre
Inscription : 17-07-2019

Re : [RÉSOLU] Question pipe et Mailman

Solution 1, une boucle for


for i in $(list_lists -b); do list_members "${i}" | wc -l; done
 


Pour chaque résultat de la commande list_lists -b exécute list_members résultat | wc -l

EDIT Pas testé, pas trop envie d'intaller Mailman wink
On peut arranger l'affichage comme ceci, a vue de nez:


for i in $(list_lists -b); do echo -n "$i : "; list_members "${i}" | wc -l; done
 



Solution 2 xargs (A essayer). Mais xargs va te permettre de passer en paramètre les résultats de list_lists -b a list_members. Comment va t il se comporter avec le 2eme pipe, il faut essayer et voir.


list_lists -b | xargs list_members | wc -l
 

Dernière modification par nlancien (23-03-2020 13:39:55)

Hors ligne

#5 23-03-2020 14:00:38

le_lutin
Membre
Lieu : Alsace
Distrib. : Debian 10 Buster
Noyau : 4.19.0-10-amd64
(G)UI : Gnome
Inscription : 01-11-2019

Re : [RÉSOLU] Question pipe et Mailman

un grand merci nlancien, tes deux premières propositions fonctionnent parfaitement. merci.gif
Je retiens la deuxième, car elle affiche également le nom de la liste dont il s'agit.
Avec xargs j'ai testé aussi mais elle ne fonctionne pas.

Une question au passage, je ne comprends pas pourquoi cette instruction :

echo 'camping' | list_members


ne fonctionne pas … tu as une idée ? scratchhead.gif

Hors ligne

#6 23-03-2020 14:33:29

nlancien
Membre
Inscription : 17-07-2019

Re : [RÉSOLU] Question pipe et Mailman

Tu envoies "camping" a l'entrée standard de list_members. Il n'est absolument pas dit que list_members lise son entrée standard comme ceci...
Il faut que ta fonction list_members soit prévue pour lire son entrée standard s'il n'y a pas de paramètres passé. Ce n'est visiblement pas le cas.

https://www.carta.tech/man-pages/man8/l … ers.8.html
Le man, j'ai fini par tomber dessus dit : ce n'est pas prévu.

Si tu regardes le man de md5sum :

md5sum - compute and check MD5 message digest
Synopsis
md5sum [OPTION]... [FILE]...
Description

Print or check MD5 (128-bit) checksums. With no FILE, or when FILE is -, read standard input.


On voit, que c'est prévu. Aussi simple que cela.

Pour la solution 2, plus haut, peux tu essayer celle ci?

list_lists -b | xargs list_members {} | wc -l


xargs est très puissant, il faut juste trouver comment lui parler gentiment. smile

Hors ligne

#7 23-03-2020 16:53:52

le_lutin
Membre
Lieu : Alsace
Distrib. : Debian 10 Buster
Noyau : 4.19.0-10-amd64
(G)UI : Gnome
Inscription : 01-11-2019

Re : [RÉSOLU] Question pipe et Mailman

nlancien a écrit :

Tu envoies "camping" a l'entrée standard de list_members. Il n'est absolument pas dit que list_members lise son entrée standard comme ceci...
Il faut que ta fonction list_members soit prévue pour lire son entrée standard s'il n'y a pas de paramètres passé. Ce n'est visiblement pas le cas.

https://www.carta.tech/man-pages/man8/l … ers.8.html
Le man, j'ai fini par tomber dessus dit : ce n'est pas prévu.


ok, merci pour l'info. Je ne savais pas tout ça.

nlancien a écrit :

Pour la solution 2, plus haut, peux tu essayer celle ci?

list_lists -b | xargs list_members {} | wc -l


xargs est très puissant, il faut juste trouver comment lui parler gentiment. smile


Cela ne fonctionne pas non plus.
Mais comme je suis arrivé à ce que je veux faire, je passe mon post en Résolu.

Hors ligne

Pied de page des forums