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

时间:2009-10-17 03:48:36

标签: ruby

我有一个写入串行设备的小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 #=> #<SerialPort:0x1016bd698>
@sp.write ["\x01\x01\x04\x00", "n", "\xff\xff\xff"] #=> 8

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

调用它。
ruby <name_of_my_script>.rb

然后一切都应该正常。