Это работает в OSX:
RANDOM := $(shell /bin/bash -c "echo $RANDOM")
test:
echo $(RANDOM)
Для кросс-платформенных случайных чисел я вместо этого прибегаю к этому:
RANDOM := $(shell od -An -N2 -i /dev/random | tr -d ' ')
Как мне заставить работать первый пример?
Причина, по которой ваша первая строка работает на OSX, а не на Ubuntu, скорее всего, потому что sh - это bash на OSX. $RANDOM
уже расширен к тому времени, когда bash -c приступает к его выполнению, поскольку вы использовали кавычки ""
. Так что вы, вероятно, хотите это:
RANDOM := $(shell bash -c 'echo $RANDOM')
Лично я бы, вероятно, пошел с awk. Нечто подобное
awk 'BEGIN{srand();printf("%d", 65536*rand())}'