Sous shell lorsqu'on fait un pipe?

gnugo -  
 gnugo -
Bonjour,
j'ai un problème que je ne parviens pas à comprendre ni à résoudre:

Quand je fais des:
echo $RANDOM
j'obtiens des nombres différents à chaque éxécution.

Par contre en faisant:
echo $RANDOM | cat
j'obtiens toujours le même résultat ( qui correspond au prochain "echo $RANDOM" dans mon shell )

j'en déduis que chaque "echo $RANDOM | cat" crée un sous-shell à chaque fois, tous dans le même état que mon shell actif, donc j'obtiens toujours le même nombre qui est le prochain de mon shell actif...)

Comment cela se fait il?
Comment, en ligne de commande, remédier au problème et envoyer à chaque exécution des valeurs différentes de $RANDOM dans un pipe ?


merci d'avance!



A voir également:

9 réponses

gnugo
 
J'ai créé un script "essai.sh" pour tester:
#!/bin/bash
echo $RANDOM
echo $RANDOM
echo $RANDOM | cat
echo $RANDOM | cat
echo $RANDOM
echo $RANDOM


Et voici le résultat que j'obtiens:
$ ./essai.sh 
1662
10022
6291
6291
6291
10791
1
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Idem pour moi, comme mes collègues mamiemando et dubcek, pas de problème ;-)

Est-ce qu'avec "cat <<<$RANDOM" à la place de "echo $RANDOM | cat" tu as toujours le même résultat ?
1
gnugo
 
Normalement cat <<<$RANDOM devrait me donner des résultats différents...mais vu mes résultats avec echo $RANDOM | cat , je commence à douter....réponse lundi sur le PC en question!

(Merci!)
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Une méthode plus violente qui pourrait marcher et basée sur /dev/random :
http://www.christopher.compagnon.name/sitewww/shell-gennumber.html

.. car pour moi la réinitialisation de $RANDOM dépend de ton shell, tandis que /dev/random est gérée par des couches plus basses.

Bonne chance
1
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Pour ma part :

(mando@aldur) (~) $ echo $RANDOM
26483
(mando@aldur) (~) $ echo $RANDOM
22861
(mando@aldur) (~) $ echo $RANDOM | cat
32160
(mando@aldur) (~) $ echo $RANDOM | cat
16745
(mando@aldur) (~) $ echo $RANDOM | cat
15298


Du coup je n'ai pas compris le problème.
0
gnugo
 
Je n'obtiens pas la même chose que toi, les "echo $RANDOM | cat" me donnent toujours la même valeur.
Mon shell :/bin/bash, j'obtiens la même chose avec /bin/sh
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
j'ai des résultats différents
$ cat f1
#!/bin/bash

echo $RANDOM
echo $RANDOM
echo $RANDOM | cat
echo $RANDOM | cat
echo $RANDOM
echo $RANDOM

$ ./f1
5393
14970
816
27615
9518
31088
$ 
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
autre exemple
$ seq 1 10 | xargs -L1 bash -c "echo $RANDOM"
7593
7593
7593
7593
7593
7593
7593
7593
7593
7593
$ 
$ seq 1 10 | xargs -L1 bash -c 'echo $RANDOM'
8097
13743
12160
24067
17692
28401
15929
2341
31589
7570
$ 
0
Flachy Joe Messages postés 2102 Date d'inscription   Statut Membre Dernière intervention   261
 
Là c'est plutôt normal :
- dans le premier cas la chaîne entre guillemets est interprété une seule fois par le shell puis passé à bash qui reçoit alors toujours la même chaîne.
- alors que dans le second cas elle n'est pas interprété par le shell mais par le bash appelé.
0
gnugo
 
cat <<<$RANDOM me donne également le même résultat à chaque fois!!

En fait j'ai posté ici pour essayer de comprendre pourquoi mon shell agit de cette façon, mais oui je pourrais m'en sortir avec /dev/random ou autre.


Auriez vous une idée de ce qui pourrait causer ces résultats? Je ne trouve pas:\
0
gnugo
 
Je viens de m'apercevoir que quand je lance un nouveau shell, cela fonctionne! j'ai bien des résultats différents!
Par contre des que je fais un simple echo $RANDOM, je reviens à ma situation anormale!

Voyez vous même...

essai.sh
#!/bin/bash

cat <<<$RANDOM
cat <<<$RANDOM
cat <<<$RANDOM
echo $RANDOM
echo $RANDOM
cat <<<$RANDOM
cat <<<$RANDOM
cat <<<$RANDOM

$ ./essai.sh 
12634
387
31718
16059
7528
21592
21592
21592


essai2.sh
#!/bin/bash

echo $RANDOM | cat
echo $RANDOM | cat
echo $RANDOM | cat
echo $RANDOM
echo $RANDOM
echo $RANDOM | cat
echo $RANDOM | cat
echo $RANDOM | cat

$ ./essai2.sh 
32552
31451
18744
16255
16297
11011
11011
11011


Comment est-ce possible?
Avez vous les mêmes résultats ?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
quelle version du shell ?
bash --version
0
gnugo
 
3.2.25(1)-release (i686-redhat-linux-gnu)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
j'ai
$ bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)

peut-être une explication
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Même version que dubcek en ce qui me concerne. C'est pour ça que je t'invite à utiliser une solution basée sur /dev/random plutôt que $RANDOM qui est dépendant du shell (ici la version).
0
gnugo
 
J'ai mis à jour bash et le problème persiste, ça ne vient pas de là à mon avis!

Je précise que je cherche à trouver la cause de cette anomalie avec $RANDOM, je sais bien que pour générer des nombres aléatoires, il y a plein d'autres solutions qui fonctionnent.
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Pourquoi tu n'essaies pas comme je te l'ai déjà suggéré une solution basée sur /dev/random ?
https://forums.commentcamarche.net/forum/affich-23445271-sous-shell-lorsqu-on-fait-un-pipe#9

Bonne chance
0