我从fortune中得到的结果太随机了-为了使我的命运具有任何科学意义,我需要遵循占星术的原则,以便选择的命运部分取决于,例如月球的相位。我把占星术方面的东西整理出来,得到一个占星术上的确定数,我可以用它作为一个随机种子。
从这里开始,我要么希望能够:
输出第N个财富,或
设置财富使用的随机种子。
我可以想象做1。通过获取财富文件列表并从其中一个文件中随机选取一行。但如果有更优雅的解决方案就好了。
我不知道怎么做,我只知道rng不是$random,所以我不能用fortune -f在bash中设置种子。

最佳答案

《财富》有很多版本和重新实现。我已经看过了Linux的Fortune源代码,您可能正在使用的源代码(这里:fortune source)。不可饶恕地(!)它使用/dev/urandom来获取种子,如果失败,则使用time(0)来代替。这就是为什么$RANDOM不起作用的原因。我只能想象这些解决方案(除了你已经找到的方案):
1)修改源以添加强制随机种子的选项。这是很琐碎的。
2)通过chroot将程序运行到受限环境中。受限环境必须包含必要的二进制文件和包含要应用的种子的伪/dev/urandom(纯文件):

echo -en "$myseed" > restrictedroot/dev/urandom
chroot restrictedroot fortune

注意,伪urandom包含二进制数据,因此必须将$myseed扩展为4字节的二进制序列(即使用4个十六进制序列“\xhh”)。一点也不方便。

09-25 17:42