Всем привет, а подскажите пож-ста, почему если писать в терминале $(($RANDOM%60))m
то работает нормально, а если в кроне выполнить след. задание
#!/bin/sh
echo $(($RANDOM%60))m >> /home/user/test.txt
значение получается всегда одно и то же?
Всем привет, а подскажите пож-ста, почему если писать в терминале $(($RANDOM%60))m
то работает нормально, а если в кроне выполнить след. задание
#!/bin/sh
echo $(($RANDOM%60))m >> /home/user/test.txt
значение получается всегда одно и то же?
потому, что в cron'е совсем другое окружение. точнее - никакого. вот каждый раз по новой и считает.
ЗЫЖ а что значит эта накрученная конструкция???
Это для примера, вообще мне надо рубить один процесс в разное время (например с 11 до 12), а для теста - просто вывожу в файл полученное значение, а как прописать правильно?
забыл сказать что делать :)
инициализировать:
[console]RANDOM=`cat /dev/urandom | hexdump -n2 -d | sed -r '1{s/[^ ]+ +//; q}'`[/console]
Блин, спасибо, такое написать - фиг додумаешься...
можно вообще без RANDOM - моя конструкция даёт 0...65535, а RANDOM 0...32768
вам надо от 0 до 59?
тогда:
echo $(( `cat /dev/urandom | hexdump -n2 -d | sed -r '1{s/[^ ]+ +//; q}'` % 60 ))такое написать - фиг додумаешься...
это обычная лень :( а ещё голод, я чё-то проголодался, вот и накатал по быстрому ;)
1) есть устройство /dev/urandom, оно даёт случайные байты, но нам нужны числа.
2) есть команда hexdump, она переводит байты в числа, для 2х байтов десятичных hexdump -n2 -d
3) получилось:
[console]$ cat /dev/urandom | hexdump -n2 -d
0000000 63589
0000002
[/console]
не совсем то.
читать маны было лень, и я просто вырезал первые непробелы и первые пробелы, и вывел что осталось:
sed -r '1{s/[^ ]+ +//; q}'4) вот и всё - получилось число 0...65535
:)
поспешил - людей насмешил
Ошибся:
00123 воспринимается как восьмеричное число, потому начальные нули надо вырезать:
echo $((`cat /dev/urandom | hexdump -n2 -d | sed -r 's/[^ ]+ +0*//; q'` % 60))ЗЫЖ странно, а я и не знал... оказывается восьмеричные числа под `кавычками` нельзя почему-то...
ЗЗЫЖ точнее можно, только восьмеричного числа 08 не бывает.
да, 2-й вариант работает без ошибок