#1 Le 25/01/2021, à 09:19
- lanfust
[RESOLU]Stocker dans une variable le résultat d'une commande
Bonjour,
Lors de la copie de fichiers avec dd j'utilise status=progress pour suivre l'évolution de la copie.
A partir des commandes suivantes :
sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed 's/[a-z]*//g'
Je filtre uniquement sur l'affichage du nombre d'octets et j'obtiens un truc du genre dans le terminal :
...
5523898368
5553258496
5578424320
...
Ce que j'aimerais c'est maintenant stocker à chaque progression dans une variable ce chiffre afin de l'utiliser dans un programme
Mais je n'arrive pas à trouver la bonne syntaxe
Dernière modification par lanfust (Le 26/01/2021, à 10:35)
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne
#2 Le 25/01/2021, à 10:09
- ar barzh paour
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
res=$(commande)
peut-être stocker dans un tableau
j'ai oublié de mettre les parenthèses ( voir post suivant)
res=($(commande))
Dernière modification par ar barzh paour (Le 25/01/2021, à 13:38)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#3 Le 25/01/2021, à 12:58
- Compte supprimé
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
peut-être stocker dans un tableau
res=$(commande)
Ce que tu proposes est une subtitution de commande que tu assignes à une variable...
#4 Le 25/01/2021, à 18:14
- lanfust
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
si par exemple je fais un truc du genre
read octet <<<$(sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed 's/[a-z]*//g') | echo $octet
ou
octet=`sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed 's/[a-z]*//g'` | echo $octet
ou
octet=$(sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed 's/[a-z]*//g' 2>&1) | echo "$octet
ça ne donne rien;
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne
#5 Le 25/01/2021, à 19:28
- Compte supprimé
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
Peut-être: rediriger la sortie standard dans un fichier et travailler sur celui-ci .
Essaie ceci :
$(sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed 's/[a-z]*//g'>>monfichier.txt)&
Après avoir validé ta commande, fais plusieurs cat monfichier.txt pour vérifier que celui-ci grossit au fur et à mesure de l'avancé de dd
Je ne suis pas assuré du résultat (non testé) alors j'attends ton retour.
Dernière modification par Compte supprimé (Le 25/01/2021, à 19:32)
#6 Le 25/01/2021, à 19:45
- Watael
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
<<<$(
non
< <(
et
$(commande)&
non plus.
en effet, ça ne va rien tenter d'exécuter dans le shell, mais la Substitution de commandes est inutile. quant à la mise en arrière plan...
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 25/01/2021, à 19:56
- Compte supprimé
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
L'exécution en arrière plan m'était inspiré par le fait que je pense(j'imagine) que dd ne rend pas la main tant qu'il est exécuté... et je comprends que la demande du Po est de traiter au fur et à mesure les infos que dd envoie. Mais bon, je ne doute pas que ma proposition n'était pas appropriée.
Merci de veiller aux grains
#8 Le 25/01/2021, à 20:37
- kamaris
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
Ce que j'aimerais c'est maintenant stocker à chaque progression dans une variable ce chiffre afin de l'utiliser dans un programme
Ce que tu décris là n'est pas adapté au stockage dans une variable : si tu veux traiter les données au fur et à mesure, branche plutôt ton programme sur la sortie de la progression, en changeant au besoin ton programme pour qu'il lise cette progression sur l'entrée standard.
Dernière modification par kamaris (Le 25/01/2021, à 20:39)
Hors ligne
#9 Le 25/01/2021, à 21:32
- lanfust
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
lanfust a écrit :Ce que j'aimerais c'est maintenant stocker à chaque progression dans une variable ce chiffre afin de l'utiliser dans un programme
Ce que tu décris là n'est pas adapté au stockage dans une variable : si tu veux traiter les données au fur et à mesure, branche plutôt ton programme sur la sortie de la progression, en changeant au besoin ton programme pour qu'il lise cette progression sur l'entrée standard.
Justement c'était l'idée de départ mais je ne sais pas du tout comment faire ça.
Quelle documentation chercher par exemple ?
Comment faire ces "branchements" ?
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne
#10 Le 25/01/2021, à 21:40
- kamaris
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
Comme tu l'as déjà fait dans ta commande : avec un pipe (« | ») :
commande | programme
Tu peux aussi utiliser une substitution de processus en bash, que tu peux donner à lire à une boucle while selon ce schéma :
while read ligne; do
…
done < <(commande)
Hors ligne
#11 Le 25/01/2021, à 22:20
- lanfust
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
Comme tu l'as déjà fait dans ta commande : avec un pipe (« | ») :
commande | programme
Tu peux aussi utiliser une substitution de processus en bash, que tu peux donner à lire à une boucle while selon ce schéma :
while read ligne; do … done < <(commande)
Avec la boucle while l'inconvénient est qu'il faut attendre la fin du processus dd pour voir s'afficher le monitoring ou ce petit programme n'est pas correct
while read line;do echo $line; done < <(sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed 's/[a-z]*//g')
C'est étonnant de ne pas capter le paramètre status=progress en réel
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne
#12 Le 26/01/2021, à 00:38
- kamaris
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
Un problème de tampon quand on passe par une substitution de commande ? (ça m'était arrivé avec awk)
Essaie d'utiliser -u pour sed à la fin :
… | sed -u 's/[a-z]*//g'
Dernière modification par kamaris (Le 26/01/2021, à 00:39)
Hors ligne
#13 Le 26/01/2021, à 10:31
- lanfust
Re : [RESOLU]Stocker dans une variable le résultat d'une commande
Un problème de tampon quand on passe par une substitution de commande ? (ça m'était arrivé avec awk)
Essaie d'utiliser -u pour sed à la fin :… | sed -u 's/[a-z]*//g'
Effectivement un souci de buffer.
Ce code fonctionne
while read line;do echo $line; done < <(sudo dd if=$source of=$usb bs=4M conv=fdatasync status=progress 2>&1 | stdbuf -o1 tr '\r' '\n' | stdbuf -o1 cut -d' ' -f1 | sed -u 's/[a-z]*//g')
Je vais pouvoir passer à la suite
Merci pour l'aide
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne