繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM