Я не могу понять, почему zsh генерирует одно и то же случайное значение при вызове подоболочки.
Рассмотрите следующий код:
$ cat script.sh
#!/bin/zsh
checkFieldConvergence () {
echo $RANDOM
echo $RANDOM
}
echo $(checkFieldConvergence)
echo $(checkFieldConvergence)
echo $(checkFieldConvergence)
checkFieldConvergence
checkFieldConvergence
checkFieldConvergence
$ ./script.sh
4049 24768
4049 24768
4049 24768
4049
24768
20764
3330
17114
1195
то же самое с bash
дает
$ cat script.sh
#!/bin/bash
checkFieldConvergence () {
echo $RANDOM
echo $RANDOM
}
echo $(checkFieldConvergence)
echo $(checkFieldConvergence)
echo $(checkFieldConvergence)
checkFieldConvergence
checkFieldConvergence
checkFieldConvergence
$ ./script.sh
12274 28155
27609 10269
14100 14662
6945
17897
20354
29817
14495
27552
Что касается SRANDOM, я вижу, что он поставляется с новым BASH 5.1 и может быть установлен извне: например, в Ubuntu. Некоторые люди используют srand() в AWK. Но ничего не могу найти на Zsh. Есть ли альтернативный способ изменить семя в Zsh? Я мог бы изменить семя в определении функции, например
Старый добрый
cat /dev/urandom | ....
вроде coderhelper.com/a/1195035/9072753Спасибо за помощь
Для будущих посетителей, из ссылки, предоставленной KamilCuk, лучшая команда практическая с использованием
/dev/urandom
не находится в ответе с наибольшим количеством голосов, и этоod -A n -t d -N 1 /dev/urandom |tr -d ' '
@manolius: я случайным образом задаю генератор случайных чисел в моем
.zshrc
, выполняяRANDOM=$(($(od -vAn -N2 -tu2 < /dev/urandom)))
. Если вы хотите сделать это и для неинтарактивных оболочек, сделайте это вместо.zshenv
.