无法从文件执行Ruby脚本,但IRB工作正常?

我有一个小的shell脚本写入串行设备:

#!/usr/bin/ruby require 'rubygems' require 'serialport' @sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200 @sp.write ["\x01\x01\x04\x00", "n", "\xff\xff\xff"] 

当我在该目录中运行./script.sh时,这不会写入串行设备。 但是当我跳进IRB并运行时:

 require 'serialport' #=> true @sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200 #=> # @sp.write ["\x01\x01\x04\x00", "n", "\xff\xff\xff"] #=> 8 

这种方式有效…我很困惑。 这可能是我输出字节数组的方式吗? 这似乎不对,它只是原始的ruby,并没有明显的依赖性。 此外,脚本不会抛出exception,它执行得很好,但设备只是没有响应。

我该如何调试呢? 我不知道从哪里开始。

我不知道SerialPort gem,但是可能是缓冲输出到串口,并且在脚本退出之前没有刷新,而IRB在返回提示时给它时间来刷新缓冲区。 我尝试添加@sp.flush ,看看是否有帮助。

不要让它成为shell脚本,而是将它作为.rb ruby​​脚本,然后调用它

 ruby .rb 

然后一切都应该工作正常。