2017-11-17 242 views
0

我正在DD-WRT Web界面中测试一个随机化路由器MAC地址的小脚本。该脚本使用awk进行随机化。这个脚本在awk被使用的时候起作用没有 shebang(#!/ bin/bash),反之亦然(没有awk但是包括shebang)。但是,当使用shebang awk时,该脚本不起作用。Bash和Awk奇怪行为(DD-WRT)

作品(使用awk的,但没有家当):

nvram set mac_clone_enable=1; 
nvram set def_hwaddr=$(awk 'function m(n){srand(systime()+n);return":"(10+int(rand()*99));}END{print "A4"m(1)m(2)m(3)m(4)m(5);}'); 
nvram commit; 
rc restart; 

也可以(有家当,但没有AWK):

#!/bin/bash 

nvram set mac_clone_enable=1; 
nvram set def_hwaddr="02:44:55:66:77:88"; 
nvram commit; 
rc restart; 

不起作用(家当和awk):

#!/bin/bash 

nvram set mac_clone_enable=1; 
nvram set def_hwaddr=$(awk 'function m(n){srand(systime()+n);return":"(10+int(rand()*99));}END{print "A4"m(1)m(2)m(3)m(4)m(5);}'); 
nvram commit; 
rc restart; 

我需要脚本来使用awk并拥有shebang,因此它可以用于cron作业。可能是什么问题呢?

+2

wrt'脚本无法正常工作 - 告诉我们它不工作的方式 - 错误的输出,没有输出,核心转储,错误信息等等......当您要求机械师帮助诊断问题时希望你的车不要只指着你的车,并说“这行不通,可能是什么问题?”。 –

+0

@EdMorton当MAC地址不起作用时,它没有被更改。用户karakfa提供了一个解决方案。 – user3163495

+0

如果这是问题,那么你说的解决方案实际上不可能适用于相同的awk版本。我怀疑真正的问题是,你在每个脚本中调用不同版本的awk,如果你不这样做,那么它会在以后回来咬你;现在就调试它。 –

回答

1

awk正在等待输入文件。你可以重写,而不是使用BEGIN

awk 'function r() {return ":"(10+int(rand()*99))} 
    BEGIN{srand(); print "A4" r() r() r() r() r()}' 

返回

A4:72:63:62:91:102 

你也不需要重新初始化每次随机种子;一次就够了。