$RANDOM ведет себя странно

Я пытаюсь сгенерировать случайное время и дату с помощью кода, который я нашел в сети. Этот код использовал $RANDOM. Странно то, что я мог продолжать выполнять скрипт, но результат даты и времени никогда не изменится. Но когда я добавляю "echo $Random", результат даты и времени меняется. Это как-то связано с заполнением случайной величины и выполнением "эха", как-то сбросить его?

#echo $RANDOM // This causes desire output
x=$(date -d "$((RANDOM%1+2010))-$((RANDOM%12+1))-$((RANDOM%28+1)) $((RANDOM%23+1)):$((RANDOM%59+1)):$((RANDOM%59+1))" '+%d-%m-%Y %H:%M:%S')
echo $x

ВЫХОД

INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test

1 ответ

Для ответа на вопрос о посеве и эффекте echoсм. $RANDOM: генерировать случайное целое число в Расширенном руководстве по написанию сценариев. Короче говоря, $RANDOM Значение (должно быть) автоматически добавляется к случайному значению при каждом запуске Bash, но его можно повторно заполнить, установив для него постоянное значение, если вам нужно, чтобы оно производило одну и ту же последовательность чисел несколько раз. Бег echo $RANDOM не засеять $RANDOM, но это заставит его перейти к следующему "случайному" значению, если оно уже было заполнено.

Насколько я могу судить, Babun - это просто Cygwin с некоторыми добавленными инструментами и конфигурациями. Я не видел ничего похожего на проблему, о которой ОП сообщает Cygwin Bash. Предполагая, что OP работает на Bash (а не на Zsh, что, по-видимому, также предоставляет Бабун), наиболее вероятной причиной проблемы является то, что что-то перезапускается $RANDOM постоянному значению. Я предлагаю дважды проверить код, чтобы убедиться, что нет никаких назначений RANDOM, Как только это будет исключено, следующим очевидным подозрением будет один из файлов запуска Babun для Bash, поскольку он утверждает, что выполняет настройку оболочки.

Если что-то пересевает RANDOM не может быть идентифицирован или исправлен, единственная возможность, которая приходит на ум, - это переустанавливать ее точно в коде на что-то достаточно случайное. Статья, упомянутая выше, предлагает

RANDOM=$$

Это очень слабо, но в этом случае может быть достаточно. Если это не так, есть другие предложения в статье, упомянутой выше (например, с участием /dev/urandom). Также см. Почему Bash $ RANDOM не заполнен (?) На некоторых машинах?, Функция Unix $RANDOM не случайна в терминале Bash, а $ RANDOM в linux bash всегда будет одинаковой при загрузке.

Другие вопросы по тегам