$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 всегда будет одинаковой при загрузке.