Forum Programmation.shell RANDOM en bash

Posté par  .
Étiquettes : aucune
0
28
juil.
2008
Bonjour
j'ai du mal à comprendre le fonctionnement du RANDOM dans bash, même si j'ai l'impression que c'est peut-être au niveau de la portée des variables que je ne comprends pas tout

J'ai écrit le petit script suivant, qui à chaque fois initialise le RANDOM (à chaque fois à la même valeur, 12), puis en demande la valeur (donc selon ma compréhension du man, je devrais toujours retrouver la même valeur (en bash intéractif je trouve toujours 5451).
Je fais quatre cas différents :
1. en script normal, RANDOM normal
2. en script normal, RANDOM exporté
3. dans une fonction bash
4. dans une fonction que je pipe vers cat

Voici mon code:
$ cat /tmp/testrnd.sh
#!/bin/bash

do_random()
{
RANDOM=$1
echo $RANDOM
}


# Methode 1
RANDOM=12
echo $RANDOM

# Methode 2
export RANDOM=12
echo $RANDOM

# Methode 3
do_random 12

# Methode 4 : premier test
do_random 12 | cat
# Methode 4 : deuxieme test
do_random 12 | cat


En le lançant deux fois, j'obtiens d'abord
5451
29563
5451
5753
6662

puis
5451
29563
5451
8479
9388


Ce que je ne comprends pas, c'est pourquoi je ne trouve pas le même résultat aux deux premières lignes, que change le "export" ? À la limite pour ce que je voulais faire ca ne m'ennuie pas trop (car j'ai au moins le même résultat à chaque fois que je lance le script, ce que je souhaitais), et surtout pourquoi je n'obtiens pas le même résultat pour le 4e mécanisme à chaque fois que je l'utilise ?
(Et encore moins à chaque fois que je lance le script)

Bon j'ai déjà passé trop de temps là-dessus donc je vais traiter mon problème autrement, mais ma curiosité reste entière sur le pourquoi du comment de ce comportement...
  • # Première réponse

    Posté par  (site web personnel) . Évalué à 3.

    export lit la variable a exporter ->
    "export RANDOM=12" == "RANDOM=12 && echo $RANDOM > /dev/null"

    Sinon, je n'ai pas le même problème que toi pour la méthode 4
    • [^] # Re: Première réponse

      Posté par  . Évalué à 2.

      Effectivement pour la méthode 4, cela dépend de la version de bash.

      Mon premier test (qui donne les résultats cités) était effectué avec un bash 3.00.16, mais avec un bash 3.2.33 ca fonctionne correctement.
      Sans doute un ancien bug qui touche les gens qui oublient de se mettre à jour ;)

      Merci pour tes remarques en tout cas.
  • # Il est peut-être sous Debian ?

    Posté par  . Évalué à 3.

    non parce que Debian et les nombres aléatoires... xD




    document.getElementByTagName('moinser').desactivate();

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.