Bonjour Watael,
Tout d'abord, merci pour tes remarques.
Ensuite, je ne suis pas le spécialiste intergalactique de bash.
Enfin, pour répondre à tes remarques :
- pour le sous-shell, j'ai pas compris le coup des accolades (je viens de vérifier dans le man de "bash". Ok pour la remarque. Je viens encore d'apprendre quelque chose 😉 ). Quoi que, je viens d'essayer en remplaçant les parenthèses par des accolades ; et bien, ça marche pô (avec bash). Bon, ça y est, il faut un ";" avant l'accolade fermante. C'est malin, ça me fait un caractère en plus, 😉
- "expr" ; oui, j'aurais pu utiliser la syntaxe que tu proposes "$(($(date +%s)+2208988808))". Cependant, je n'aime pas trop cette syntaxe qui est vraiment chatouilleuse sur les espaces, ce qui n'est pas le cas de "expr". Ben, finalement, non, avec ou sans espaces au niveau des parenthèses, ça marche pareil,
- "xargs" ; j'ai voulu écrire un script dans lequel les traitements se suivent "naturellement" dans l'ordre des pipes, quitte à ne pas être optimal dans la concision de l'écriture, ni même dans le temps d'exécution,
- nombre de secondes et "date +%-N" ; je ne connaissais pas la syntaxe "+%-N", c'est pourquoi j'ai utilisé "sed" pour virer les zéros non significatifs, et pour être exhaustif, j'ai mis le même traitement pour les secondes bien que sachant pertinemment que ce nombre ne commençait pas par zéro. Maintenant, si je peux garantir que les deux résultats n'ont pas de zéro non significatifs, je supprimerai les deux "sed" sans aucun remord.
- "awk" ; c'est certainement très bien (c'est ce que je lis partout), mais je ne sais pas l'utiliser alors que je maîtrise assez bien "grep", "cut" et "sed". De plus, sur le plan didactique (y compris pour moi), ça a l'avantage de bien décomposer les traitements : je trouve, je nettoie, j'isole la chaîne de caractères qui m'intéresse, je mets en forme.
- etc... ; j'ai pas trouvé. 😉 😃
Cela dit, mon script, il donne le bon résultat (dans ses deux versions). Et comme c'est du one shot, il n'a pas besoin d'être optimisé en termes de nombre de commandes chargées puis lancées.
Bon, je vais le retravailler.
[EDIT] Une version encore simplifiée :
{ expr $(date +%s) + 2208988808 | xargs printf '%08x' ; date +%-N | xargs printf '%08x' ; ip a | grep -m 1 'link/ether' | sed -e 's/^[ \t]*//' | cut -f 2 -d ' ' | sed -e 's/://g' -e 's/^.\{6\}/&fffe/' ;} | xxd -r -p | sha1sum -b | cut -f 1 -d ' ' | tail -c 11 | sed -e 's/^/fd/' -e 's/^.\{4\}/&:/' -e 's/^.\{9\}/&:/' -e 's/^.\{14\}/&::\/64/'
Et pour "faire plaisir" à Watael : 😉
{ printf '%08x' $(( $(date +%s) + 2208988808 )) ; printf '%08x' $(date +%-N) ; ip a | grep -m 1 'link/ether' | sed -e 's/^[ \t]*//' | cut -f 2 -d ' ' | sed -e 's/://g' -e 's/^.\{6\}/&fffe/' ;} | xxd -r -p | sha1sum -b | cut -f 1 -d ' ' | tail -c 11 | sed -e 's/^/fd/' -e 's/^.\{4\}/&:/' -e 's/^.\{9\}/&:/' -e 's/^.\{14\}/&::\/64/'
[/EDIT]
Amicalement.
Jean-Marie