我正在尝试执行shell命令来写入ruby中的文件,但我无法使用system
获取退出状态:
table=File.new('exitStatusTest.txt','w')
exit_status=system(table.puts('ls'))
puts exit_status.to_s
这将抛出:exit_status.rb:5:in system': can't convert nil into String
虽然我期待一个TrueClass,与我使用时相同:
exit_status=system('ls')
THX!
答案 0 :(得分:0)
由于table.puts('ls')
的结果为nil,system
参数应为字符串。
table=File.new('exitStatusTest.txt','w')
output = `ls`
#output might be empty string.
table.puts(output) if not output.empty? # write data into file if output is not empty.
exit_status = !output.empty? # exit_status is true
`ls`.class
=> String
system('ls').class
=> TrueClass
答案 1 :(得分:0)
通过使用 system
作为参数的结果调用table.puts
,目前尚不清楚要实现的目标。
puts
返回nil
,因此您正在调用system(nil)
,收到非常可预测的异常。
假设您要执行命令并将放入表中,您可以尝试tap
一个字符串:
str = 'ls' # or whatever
exit_status=system(str.tap { |s| table.puts(s) })