2016-08-12 151 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

虽然这不能直接回答你的问题。这是您的应用程序的更好的编程解决方案。不需要手动进行错误重定向/检查并将其卸载到更大的社区。 –