Voilà ma problématique :
- je lance mlterm en utilisant l'option -p pour changer l'image de fond du terminal
- j'ai un répertoire d'image qui va bien. Les images ont un nom quelconque et je ne veux pas changer ça.
- je cherche simplement à choisir de façon aléatoire un nom d'image dans mon répertoire de manière à avoir un affichage sympa et varié.
En utilisant find, $RANDOM, grep et deux trois autres outils GNU, j'en suis arrivé à cette solution ... que je trouve laide ! :
mclient -f green -s false -w 12 -p `find /home/talineo/.fehbg_img/ -type f -maxdepth 1 | grep -n "" | grep "^\`expr $RANDOM % \\\`find /home/talineo/.fehbg_img/ -type f -maxdepth 1\\\` + 1\`:" | cut -d ":" -f 2` &
Bon évidemment j'ai placé sur différentes lignes par dépit mais je cherche à faire plus compact.
L'explication de ce pavé :
- j'affiche un liste des fichiers à la racine du répertoire d'image (le premier find)
- je numérote le tout (grep -n "")
- je choisis un numéro en fesant un grep sur $RANDOM modulo le nombre d'image dans le repertoire d'image (find ... | wc -l)
- et enfin je récupère le nomdu fichier dans l'entrée sélectionné (cut)
- ouf ...
Je suis sur qu'il y a beaucoup plus simple mais là je sèche un peu ...
J'ai tenté d'utiliser les tee, redirections sans grand succès pour ne pas faire le find plusieurs fois notamment.
Sinon je me dis que awk pourrait remplir cette tache mais j'avoue mettre plus penché sur sed pour le moment.
ou alors perl ou alors la solution simple limpide que je n'ai pas vu ! :)
# plus simple
Posté par jjl (site web personnel) . Évalué à 4.
en deux mots :
* array est un tableau contenant la liste des images
* ${#array[@]} est la taille de ce tableau
* $(expr $RANDOM % ${#array[@]}) : est un nombre aleatoire modulo cette taille
Cela ne fonctionnera pas avec les fichiers qui ont un espace dans leur nom.
[^] # Re: plus simple
Posté par Frédéric Heulin . Évalué à 2.
mlterm -p `imgs=(\`find ~/.fehbg_img/ -maxdepth 1 -type f\`) && echo ${imgs[$(expr $RANDOM % ${#imgs[@]})]}`
effectivement bien plus simple :)
Merci.
[^] # Re: plus simple
Posté par Krunch (site web personnel) . Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.