2016-08-12 193 views
0

我正嘗試編寫一個ruby腳本來通過使用「macchanger」工具快速更改我的無線MAC地址。我擁有所有根權限來更改它。我試試這個:Ruby在Linux上執行Bash命令

`ifconfig #{@wifi_device.getName()} down` 
    output= `macchanger -m AA:BB:CC:DD:EE:FF #{@wifi_device.getName()}` 
    `ifconfig #{@wifi_device.getName()} up` 

它通常工作得很好,但是當有一個問題,比如我輸入了無效的MAC地址,並在bash打印任何錯誤,我無法從Ruby.It打印抓住它只有成功的消息,而不是錯誤。當我嘗試一個無效的mac, 我的問題是否有任何建議擺脫執行bash命令並正確讀取輸出。

回答

1

shell需要知道從哪裏發送stderr。 2>&1是一個很好的方式來做到這一點,它重定向2(標準錯誤)爲1(標準輸出),這是什麼「輸出」捕獲。

output= `macchanger -m AA:BB:CC:DD:EE:FF #{@wifi_device.getName()} 2>&1` 

高級Bash腳本指南在I/O Redirection上有很好的篇章。

+1

謝謝,這對我工作,因爲我想! – ccca

+0

我很高興能幫到你! –

2

當您使用this macchanger時,則不需要調用shell命令。您可以將macchanger放入您當前的文件夾並require_relative './macchanger'。在此之後,您可以使用類MacChanger

+0

謝謝你的建議,我會用它 – ccca

+1

雖然這不能直接回答你的問題。這是您的應用程序的更好的編程解決方案。不需要手動進行錯誤重定向/檢查並將其卸載到更大的社區。 –