如何禁用Ruby标准库`Shell`的`notify`功能以消除多余输出?
问题原因
你设置的是Shell实例的verbose、debug属性,而打印冗余输出的Shell::CommandProcessor#notify方法默认读取的是Shell类的全局类属性,因此实例级别的配置不会生效。
解决方案
方案1:设置类级别的开关(推荐)
直接修改Shell的全局类属性即可:
require 'shell' # 注意是类属性,不是实例属性 Shell.verbose = false Shell.debug = false sh = Shell.new print sh.system('date')
方案2:兜底覆盖notify方法
如果部分Ruby版本下方案1不生效,可以直接重写notify方法彻底关闭通知输出:
require 'shell' # 重写notify方法为空实现 class Shell::CommandProcessor def notify(*args) end end sh = Shell.new print sh.system('date')
两种方案都可以消除多余的命令执行日志输出,仅保留命令本身的返回结果。
内容的提问来源于stack exchange,提问作者Jared Beck
相关产品推荐
相关产品推荐

