Sous shell lorsqu'on fait un pipe?

Fermé
gnugo - 21 oct. 2011 à 10:13
 gnugo - 28 oct. 2011 à 14:24
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

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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
21 oct. 2011 à 16:05
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
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié par mamiemando le 23/10/2011 à 19:23
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
21 oct. 2011 à 10:17
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
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
21 oct. 2011 à 15:51
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
21 oct. 2011 à 16:42
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 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
Modifié par Flachy Joe le 21/10/2011 à 19:20
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
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
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 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
25 oct. 2011 à 08:09
quelle version du shell ?
bash --version
0
3.2.25(1)-release (i686-redhat-linux-gnu)
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
25 oct. 2011 à 13:15
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
25 oct. 2011 à 19:40
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
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
26 oct. 2011 à 20:05
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