The above options allow me to use shuf to efficiently simulate a dice roll, but there is a clear bias when I do so, for example:
$ for i in {1..10000}; do shuf --input-range=1-6 --head-count=1; done | sort | uniq --count
1730 1
1411 2
1882 3
1809 4
1520 5
1648 6
Using seq instead of input-range does not appear biased:
$ for i in {1..10000}; do seq 6 | shuf --head-count=1; done | sort | uniq --count
1652 1
1696 2
1674 3
1638 4
1713 5
1627 6
Same for head:
$ for i in {1..10000}; do shuf --input-range=1-6 | head --lines=1; done | sort | uniq --count
1639 1
1674 2
1655 3
1669 4
1688 5
1675 6
It seems that somehow combining both options affects the distribution. I assume there's some performance optimization in that case since shuf doesn't need to permute the entire input range.