[Résolu] Optimisation d'un script bash

#!/bin/sh if [ $(macommande) ]; then xmessage -center $(macommande) fonctionne& fi
Le probleme c’est qui dans cette configuration je repete deux fois la commande car j’ai besoin du résultat de cette commande pour l’afficher mais je dois savoir si elle fonctionne.

Je pensais donc dans la condition mettre le résultat dans une variable mais ca ne fonctionne pas.

Vous auriez une idée pour avoir un script qui fonctionne du genre

#!/bin/sh if [ $(mavariable=macommande) ]; then xmessage -center $mavariable fonctionne& fi

#!/bin/sh RES=$(macommande) if [ $RES ]; then xmessage -center $RES fonctionne& fi
Non?

Ben ca fonctionne, au niveau optimisation de code c’est bon par contre il met plus de temps à l’exécution. J’ai l’impression que la commande est répété à chaque fois que je demande $var

En tous cas merci pour la solution, :wink: je ne vois vraiment pas pourquoi je n’y ai pas pensé :imp:

#!/bin/sh echo > res TOTO=$(echo blop >> res;grep $1 *) if [ $TOTO ] ; then echo $TOTO else echo raté fi cat reset à l’eécution

[code]$ ./gre sh
gre:#!/bin/sh

blop
$ ./gre gabeu
raté

blop
$ [/code]
Un seul blop à chaque fois donc $TOTO n’est évalué qu’une seule fois.

Je n’ai pas trouvé de benchmark mais dash semble etre plus rapide que bash, donc si ton script est conforme à posix, en changeant la premiere ligne en
#!/bin/dash
(et en installant dash)
Tu peux peut-etre gagner du temps si il y a beaucoup d’appels à des sous-scripts.
Ex pour le boot, dash est plus rapide:
initscripts-ng.alioth.debian.org … able2.html

Cette manie du rendement… :slightly_smiling:

Pour le boot, tant que c’est pas au détriment de la lisibilité, ok.
Mais sinon, je prefere avoir un boot 6 secondes plus lent (periode de mon cycle neuronal :laughing:) mais compréhensible…

Salut,

Je sais pas si celà vas plus vite, mais j’en ai ecris moins :slightly_smiling:

#!/bin/sh
if [ $0 ]; then
xmessage -center $0 fonctionne&
fi

[quote=“BorisTheButcher”]Je n’ai pas trouvé de benchmark mais dash semble etre plus rapide que bash, donc si ton script est conforme à posix, en changeant la premiere ligne en
#!/bin/dash
(et en installant dash)
Tu peux peut-etre gagner du temps si il y a beaucoup d’appels à des sous-scripts.
Ex pour le boot, dash est plus rapide:
initscripts-ng.alioth.debian.org … able2.html[/quote]
Je confirme que c’est plus rapide, et qu’aprés trois mois d’utilisation de dash comme sh, je n’ai toujours pas eu de prolême à cause de ça.

[quote=“ggoodluck47”]Salut,

Je sais pas si celà vas plus vite, mais j’en ai ecris moins :slightly_smiling:

#!/bin/sh
if [ $0 ]; then
xmessage -center $0 fonctionne&
fi[/quote]moins de caractères à lire, il y a des chances que tu gagnes une dizaine de ticks au chargement du script :slightly_smiling:

Merci pour toutes ces réponses

Le probleme avec ton script ggoodluck47 c’est que l’on doit passer en parametre la commande que l’on veux executer et c’est ce que je souhaiterais évité.

Ceci n’est en plus qu’une partie d’un script que je commence seulement c’est pourquoi j’aimerais l’optimiser au maximum afin d’éviter des cycles et aussi des instructions inutiles.

Avec #!/bin/sh RES=$(macommande) if [ $RES ]; then xmessage -center $RES fonctionne& fi Ici d’apres fran.b $RES serait evalué qu’une seule fois le temps d’exécution est de real 0m2.354s user 0m2.000s sys 0m0.240s
Avec ce code

#!/bin/sh if [ $(macommande) ]; then xmessage -center $(macommande) fonctionne& fiDonc ici normalement la commande est évaluée deux fois mais nous avons un temps d’execution inférieurreal 0m2.198s user 0m1.940s sys 0m0.212s L’accès au contenu de la variable prendrait tant de temps que ca???

fait une boucle qui lance ton script 200 fois et compares. sur une execution c’est peut être un peu dangereux de juger.
Sinon le script de ggoodluck ne necessite aucun paramètre: $0 désigne le nom du script lui même, même si ce n’est pas ça que tu veux récupèrer.
Par ailleurs, lancer deux fois macommande n’est équivalent à stocker le resultat et l’utiliser deux fois que si macommande ne fait pas d’effet de bord.

J’ai finis de comparer et effectivement les résultats étaient erronés j’ai bien 2 fois moins de temps avec $var qu’avec la commande directe. Je passe donc à la suite merci.

Sinon qu’entends tu parler par effet de bord d’une commande???

fr.wikipedia.org/wiki/Effet_de_b … matique%29
idéalement toute routine est une boite noire qui prend des arguments et produit un résultat, et laisse le reste de l’univers dans l’état ou elle l’a trouvé.
reste à trouver la routine ultime qui lance toutes les autres subs, et on peut se demander quels sont les paramètres de cet univers, et à qui profite son résultat. :laughing: