[it.fan.marco-ditri] roulette russa

Marco Bisetto blug@lists.linux.it
Tue, 15 Apr 2003 17:05:25 +0000


>[ $[$RANDOM % 6] = 0 ] && rm -rf /

[ $(($RANDOM % 6)) = 0 ] && rm -rf /

Mi sono chiesto se quanto sopra potesse funzionare in sh, o se $RANDOM
fosse una variabile specifica di bash.

In realta` ho scoperto (man ash) che $RANDOM non e` POSIX standard,
quindi anche la seconda funziona con bash, ma non con una generica sh.

[ $(($(head -c 1 /dev/random |od -d -An) % 6)) = 0 ] && rm -rf /

Cosi` si ottiene qualcosa che funziona su Linux con una shell
standard.

Per non far torto ai matematici ammetto che la mia versione non e`
perfettamente equivalente, ma comporta maggior rischio della
precedente a causa dell' errore di approssimazione. Tuttavia mi pareva
che prendere piu` di un byte da /dev/random per una simile faccenda
fosse uno spreco di entropia del sistema.

m