[英]Unable to execute Ruby script from file, but IRB works fine?
我有一个写入串行设备的小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
这种方式有效...我很困惑。 这可能是我输出字节数组的方式吗? 这似乎不对,它只是原始的红宝石,并没有明显的依赖性。 此外,脚本不会抛出异常,它执行得很好,但设备只是没有响应。
我该如何调试呢? 我不知道从哪里开始。
我不知道SerialPort gem,但是可能是缓冲输出到串口,并且在脚本退出之前没有刷新,而IRB在返回提示时给它时间来刷新缓冲区。 我尝试添加@sp.flush
,看看是否有帮助。
不要让它成为shell脚本,而是将其作为.rb ruby脚本,然后调用它
ruby <name_of_my_script>.rb
一切都应该工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.