Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 奇怪的行为_Bash_Cygwin_Babun - Fatal编程技术网

Bash 奇怪的行为

Bash 奇怪的行为,bash,cygwin,babun,Bash,Cygwin,Babun,我试图用我在网上找到的代码生成随机日期时间。这段代码使用了$RANDOM。奇怪的是,我可以继续执行脚本,但是datetime结果永远不会改变。但当我添加“echo$Random”时,日期时间结果会发生变化。这是否与随机变量的种子设定和以某种方式执行“echo”重置有关 #echo $RANDOM // This causes desire output x=$(date -d "$((RANDOM%1+2010))-$((RANDOM%12+1))-$((RANDOM%28+1)) $((RAN

我试图用我在网上找到的代码生成随机日期时间。这段代码使用了$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

有关种子设定和回声效果的问题的答案,请参阅中的。简而言之,
$RANDOM
值(应该)在每次运行Bash时自动种子设定为随机值,但如果需要多次生成相同的数字序列,可以通过将其设定为常量值来重新种子设定。运行
echo$RANDOM
不会重新设定
$RANDOM
的种子,但如果已设定种子,则会使其移动到下一个“RANDOM”值

据我所知,Babun只是Cygwin,添加了一些工具和配置。我没有看到任何类似于OP与Cygwin Bash报告的问题。假设OP运行的是Bash(而不是Zsh,Babun似乎也提供了Zsh),那么问题最可能的原因是某个东西正在将
$RANDOM
重新播种到一个常量值。我建议仔细检查代码,确保没有分配给
RANDOM
。一旦排除了这一点,下一个明显的疑点就是Bash的一个Babun启动文件,因为它声称要进行shell定制

如果无法识别或修复任何正在重新设定的
RANDOM
,唯一的选择就是在代码中明确地将其重新设定为合理的随机值。上面提到的文章建议

RANDOM=$$

这很弱,但在这种情况下可能已经足够好了。如果不是,则在上面引用的文章中还有其他建议(例如涉及
/dev/uradom
)。另请参见和。

显示echo$BASH\u版本的输出。我使用的是Babun(Windows Shell),如果它能工作,我会感到惊讶(但是,我很惊讶它还没有工作),但是,如果在算术表达式中使用
$RANDOM
而不是
RANDOM
,会发生什么情况?年份总是2010年,因为
RANDOM%1
始终为零。请参阅,特别是关于提供“小型自包含示例”的部分。为了最大限度地获得有用的答案,您需要提供工作代码及其产生的输出。尚未提供在屏幕捕获中生成输出的代码。如果代码过于复杂(或敏感)而无法在此处发布,则应将其缩减到演示问题所需的最小值。这样做可能会揭示问题的原因(通常是这样)。感谢您的全面回复。为了回答您的几个问题,是的,我使用的是Bash而不是ZSh。我发布的代码与实际代码只有一个区别——echo语句生成一些硬编码值和随机生成的datetime,而不是只回显随机生成的datetime。我还没来得及研究你所有的建议……但当我在Ubuntu服务器和git shell上运行相同的脚本时,它运行得很好。但我会研究你的建议,以备将来参考。谢谢你的帮助。