2017-11-17 240 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 

你也不需要重新初始化每次隨機種子;一次就夠了。