我正在尝试使用在网上找到的代码生成随机日期时间。此代码使用$ RANDOM。奇怪的是,我可以继续执行脚本,但是datetime结果永远不会改变。但是,当我添加“ echo $ Random”时,日期时间结果会更改。与随机变量的播种和执行“ echo”重置有关吗?
#echo $RANDOM // This causes desire output
x=$(date -d "$((RANDOM%1+2010))-$((RANDOM%12+1))-$((RANDOM%28+1)) $((RANDOM%23+1)):$((RANDOM%59+1)):$((RANDOM%59+1))" '+%d-%m-%Y %H:%M:%S')
echo $x
输出
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
INT,1,100128,2018/05/24 08:00:00,1,0,Test
答案 0 :(得分:1)
有关echo
的种子和效果的问题的答案,请参见$RANDOM: generate random integer中的Advanced Bash-Scripting Guide。简而言之,$RANDOM
值(假设是)在每次Bash运行时自动播种为随机值,但是如果需要使其产生相同的序列,可以通过将其设置为恒定值来重新播种。数倍。运行echo $RANDOM
不会重新设置$RANDOM
的种子,但是如果已经播种,它将导致它移至下一个“随机”值。
据我所知,Babun只是Cygwin,具有一些附加的工具和配置。我还没有看到OP向Cygwin Bash报告问题的情况。假设OP运行的是Bash(而不是Babun似乎提供的Zsh),则最有可能导致此问题的原因是,$RANDOM
的值重新变为常数。我建议仔细检查代码,以确保没有分配给RANDOM
。一旦排除了该漏洞,下一个明显的可疑对象就是Bash的Babun启动文件之一,因为它声称可以进行shell自定义。
如果无法识别或修复正在播种的RANDOM
,唯一想到的就是将其在代码中显式地重新种子化为某种随机的东西。以上引用的文章建议
RANDOM=$$
这很弱,但是在这种情况下可能就足够了。如果不是,则上面引用的文章中还有其他建议(例如,涉及/dev/urandom
)。另请参见Why is Bash’s $RANDOM not seeded (?) on some machines?,Unix $RANDOM function not random in Bash terminal和$RANDOM in linux bash will alway be the same upon bootup。