Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4240 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [basheries] - mystère de boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[basheries] - mystère de boucle

n°1512539
Skopos
Posté le 17-05-2026 à 21:12:53  profilanswer
 

Salut.
 
Je suis en train de bidouiller un script...
 

Code :
  1. #!/usr/bin/env bash
  2. lsfiles=$(ls ~/Documents/manpages/)
  3. echo "$lsfiles" >> logtest.log
  4. while read -r filename ; do
  5.   zathura ~/Documents/manpages/"$filename" &
  6. done < <(echo "$lsfiles" )


 
L'objet final du script ne sera pas d'ouvrir des pdf avec zathura, ça me sert juste à tester le fonctionnement.
 
Au premier test, sans le &, zathura a bien ouvert le premier fichier mais ensuite le script se pause jusqu'à ce que je ferme zathura. Alors seulement le script continue sa boucle.
 
Si par contre je commente la ligne et que je la remplace par un echo "$filename", la boucle enchaine bien les entrées.
 
Ne voyant pas trop quoi faire j'ai ajouté l'& qui lance les commandes en background et là ça marche comme je m'y attendais : 3 occurrences se lancent...
Mais je ne comprend pas pourquoi ça bloque sans.
J'ai l'impression qu'il y a un truc basique et fondamental qui m'échappe  [:transparency]  
 
En écrivant le post me vient l'idée que c'est peut-être parce que la boucle attend un code retour mais qu'il ne vient qu'au moment où zathura est fermé (ou a planté)
Et dans le cas du &, chaque itération de la boucle se fait dans un sous-shell (si j'ai bien compris le truc) et le script continue à boucler tant que le process se lance bien.
?
 
Merci pour vos lumières  :jap:  
 
 

mood
Publicité
Posté le 17-05-2026 à 21:12:53  profilanswer
 

n°1512540
memaster
M.arc a volé mon 62
Posté le 17-05-2026 à 21:30:46  profilanswer
 

Skopos a écrit :

Salut.
 
Je suis en train de bidouiller un script...
 

Code :
  1. #!/usr/bin/env bash
  2. lsfiles=$(ls ~/Documents/manpages/)
  3. echo "$lsfiles" >> logtest.log
  4. while read -r filename ; do
  5.   zathura ~/Documents/manpages/"$filename" &
  6. done < <(echo "$lsfiles" )


 
L'objet final du script ne sera pas d'ouvrir des pdf avec zathura, ça me sert juste à tester le fonctionnement.
 
Au premier test, sans le &, zathura a bien ouvert le premier fichier mais ensuite le script se pause jusqu'à ce que je ferme zathura. Alors seulement le script continue sa boucle.
 
Si par contre je commente la ligne et que je la remplace par un echo "$filename", la boucle enchaine bien les entrées.
 
Ne voyant pas trop quoi faire j'ai ajouté l'& qui lance les commandes en background et là ça marche comme je m'y attendais : 3 occurrences se lancent...
Mais je ne comprend pas pourquoi ça bloque sans.
J'ai l'impression qu'il y a un truc basique et fondamental qui m'échappe  [:transparency]  
 
En écrivant le post me vient l'idée que c'est peut-être parce que la boucle attend un code retour mais qu'il ne vient qu'au moment où zathura est fermé (ou a planté)
Et dans le cas du &, chaque itération de la boucle se fait dans un sous-shell (si j'ai bien compris le truc) et le script continue à boucler tant que le process se lance bien.
?
 
Merci pour vos lumières  :jap:  
 
 


koukou skippy :hello:  
comme un pb d'heritage/arborescence de processus/pid?


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°1512541
memaster
M.arc a volé mon 62
Posté le 17-05-2026 à 21:34:20  profilanswer
 

A lire :hello:  
https://helios2.mi.parisdescartes.f [...] me/TD4.pdf


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°1512542
memaster
M.arc a volé mon 62
Posté le 17-05-2026 à 21:47:08  profilanswer
 

et tu devrais vérifier le nombre $files dans ton répertoire avant de lancer un while.
tu mets une recopie dans /temp pour travailler sur un nombre fixe. qd c'est fini tu vas vérifier à nouveau dans le repertoire concerné.
 
parce que si un file supplémentaire vient à se créer (comme par hasard :o ), bah ça va foutre le brun dans les inodes.

Message cité 1 fois
Message édité par memaster le 17-05-2026 à 21:51:16

---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°1512549
StephaneAs​coet
Posté le 18-05-2026 à 01:59:12  profilanswer
 

Skopos a écrit :

Salut.
 
Je suis en train de bidouiller un script...
 
 
 
 


Alors déjà, récupérer la sortie de "ls" pour autre chose que de l'affichage interactif (avec des yeux humains), c'est mal  :pfff:  (fais des recherches sur les bonne pratiques Bash, qui devraient aussi te pousser à abandonner "read" )
 

Citation :


Au premier test, sans le &, zathura a bien ouvert le premier fichier mais ensuite le script se pause jusqu'à ce que je ferme zathura. Alors seulement le script continue sa boucle.
 
Si par contre je commente la ligne et que je la remplace par un echo "$filename", la boucle enchaine bien les entrées.  


 
Visiblement, Zathura est une application interactive, le comportement me semble parfaitement normal  :ange:


---------------
--  
n°1512687
Skopos
Posté le 22-05-2026 à 14:01:02  profilanswer
 

memaster a écrit :


koukou skippy :hello:  
comme un pb d'heritage/arborescence de processus/pid?


Kikou ToiMunster  :o  
Oui, je vois mieux le fonctionnement depuis mais c'est pas ce qui bloquait...
 


... voilà, c'est comme s'il y avait un wait implicite dans la boucle qd je la teste avec Zathura, et c'est normal en fait...
 

memaster a écrit :

et tu devrais vérifier le nombre $files dans ton répertoire avant de lancer un while.
tu mets une recopie dans /temp pour travailler sur un nombre fixe. qd c'est fini tu vas vérifier à nouveau dans le repertoire concerné.
 
parce que si un file supplémentaire vient à se créer (comme par hasard :o ), bah ça va foutre le brun dans les inodes.


je pige pas le rapport avec les inodes (je vois à peu près ce que c'est), je vais manipuler des fichiers (je comptais les déplacer avant de les traiter), je vais pas interagir directement sur les inodes... mais ça m'amène une réflexion dont j'ai du mal à estimer la portée.
 
Si au lieu de déplacer les fichiers ailleurs je créé des liens durs, puis je fais les traitements sur ces liens et qu'à la fin je supprime les fichiers d'origine... ça apporte qqchose ? (pas que je me soucie de perf ou autre, c'est juste pour savoir et mieux comprendre)
 

StephaneAscoet a écrit :


Alors déjà, récupérer la sortie de "ls" pour autre chose que de l'affichage interactif (avec des yeux humains), c'est mal  :pfff:  (fais des recherches sur les bonne pratiques Bash, qui devraient aussi te pousser à abandonner "read" )


 :jap:  
 
Quand on a qu'un marteau, tout ressemble à un clou.
J'ai bien vu de potentiels pb à utiliser ls mais je voulais tester si ça marchait.
 

StephaneAscoet a écrit :


Citation :


Au premier test, sans le &, zathura a bien ouvert le premier fichier mais ensuite le script se pause jusqu'à ce que je ferme zathura. Alors seulement le script continue sa boucle.
 
Si par contre je commente la ligne et que je la remplace par un echo "$filename", la boucle enchaine bien les entrées.  


 
Visiblement, Zathura est une application interactive, le comportement me semble parfaitement normal  :ange:


Ok, je comprend mieux la différence de comportement donc  :jap:  
 
Avec un process comme lp pour imprimer je devrais pas avoir ce soucis si je comprend bien (pas essayé encore, je regarde la doc de la commande... et je fouine sur internet car j'avoue que les manpages sont parfois un peu hermétique pour moi)
 
Par contre y'a un risque "d'engorger" l'imprimante si elle recevait trop de truc à imprimer d'un coup ou ça se mettra en file d'attente tout seul quoi qu'il arrive ?
(risque seulement théorique dans mon contexte d'utilisation, c'est juste pour savoir).

n°1512690
memaster
M.arc a volé mon 62
Posté le 22-05-2026 à 15:19:45  profilanswer
 

lire un fichier faisant parti du système pendant qu'il est en train de se créer, ça craint. l'inode est écrite dans la table que qd le fichier est complet et libéré par la tâche du créateur. si tu le lis pendant, ça va bloqué.

Citation :


Type et droits d’accès
Nombre de liaisons per­ma­nentes
Numéro d’uti­li­sa­teur (UID)
Numéro de groupe (GID) ou iden­ti­fiant de groupe (GUI)
Taille du fichier (en octets)
Date de la dernière mo­di­fi­ca­tion (mtime)
Date du dernier chan­ge­ment d’état (ctime)
Date du dernier accès (atime)
Adresse des blocs de données

Adresse des blocs d’in­di­rec­tion
Nombre de liens
Numéro de version


c'est pour cela que je t'ai conseillé de travailler sur une copie fixe dans /temp. c'est un repertoire de travail commun.
Et de cette manière, au moment où le pc s'éteinds ben tout cela disparait.


Message édité par memaster le 22-05-2026 à 15:20:11

---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°1512691
memaster
M.arc a volé mon 62
Posté le 22-05-2026 à 15:25:45  profilanswer
 

Skopos a écrit :


Kikou ToiMunster  :o  
Oui, je vois mieux le fonctionnement depuis mais c'est pas ce qui bloquait...
 


sisi c'est bien ce qui bloquait. ton script attends un sigterm de fin de programme pour poursuivre le traitement.

Skopos a écrit :


... voilà, c'est comme s'il y avait un wait implicite dans la boucle qd je la teste avec Zathura, et c'est normal en fait...
 


le & casse l'héritage sous jacent de ton script parent.
à n'utiliser que dans un terminal, pas dans un script sh.
 


---------------
ma conduite intérieure .:R | memaster pilote officiel de la HFR Badoit-Auchan F1 Team | zéro tracas, zéro blabla MMa.ster
n°1512694
StephaneAs​coet
Posté le 22-05-2026 à 16:14:09  profilanswer
 

Skopos a écrit :


Si au lieu de déplacer les fichiers ailleurs je créé des liens durs, puis je fais les traitements sur ces liens et qu'à la fin je supprime les fichiers d'origine... ça apporte qqchose ? (pas que je me soucie de perf ou autre, c'est juste pour savoir et mieux comprendre)
 


 
Bof
 
 

Skopos a écrit :


 
Avec un process comme lp pour imprimer je devrais pas avoir ce soucis si je comprend bien (pas essayé encore, je regarde la doc de la commande... et je fouine sur internet car j'avoue que les manpages sont parfois un peu hermétique pour moi)


 
As tu tout simplement essayé «lp {dossier}/*.pdf» ?
Sans paramètres, il imprime sur l'imprimante par défaut, avec les paramètres par défaut. La plupart du temps ça convient, et il y a toujours moyen de les modifier dans Cups si besoin. Les pages de Man sont pour moi un complément, les explications de base, je les ai dans moult cours, revues et livres.

Citation :


Par contre y'a un risque "d'engorger" l'imprimante si elle recevait trop de truc à imprimer d'un coup ou ça se mettra en file d'attente tout seul quoi qu'il arrive ?
(risque seulement théorique dans mon contexte d'utilisation, c'est juste pour savoir).


À mon avis ce n'est pas trop un soucis mais je ne connais pas la volumétrie prévue. Au pire tu peux toujours jouer avec des «sleep».... voir, si le script sera interactif, poser la question, tous les x fichiers, par exemple : «les impressions se passent-elles bien? Souhaitez-vous poursuivre avec les n fichiers PDF restants ?»


---------------
--  

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [basheries] - mystère de boucle

 

Sujets relatifs
Mysql redemarre en boucleClé Live Linux Mint qui tourne en boucle
[bash] faire une boucle for sur une seul ligne[Help] Petit script tout bete pour faire une boucle
Serveur zimbra open accessible uniquement depuis l'adresse de loopbackComment sortir complètement de cette boucle ?
boucle shell a 2 variable☑[bash] Boucle for sur un fichier unique OU contenu d'un dossier ?
quels jeux vidéos avec démonstration en boucle ? 
Plus de sujets relatifs à : [basheries] - mystère de boucle


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)