在尝试了解 Ruby 执行方法时,我发现这篇关于在 Ruby 中运行命令的五种方法的博文 http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/
作者创建了一个err.rb文件,输出两行,一行在STDOUT上,另一行在STDERR上
#!/usr/bin/env ruby
puts "out"
STDERR.puts "error"
他尝试运行它的第一种方式是使用 Kernal#`(反引号)
>> `./err.rb`
err
=> "out\n"
这说明的一点是,当使用反引号运行时
STDERR is output, but not captured STDOUT is captured
当我试图在我的系统上复制它时,我得到了一个权限错误
localhost:sites mike$ `./err.rb`
-bash: ./err.rb: Permission denied
我试过 sudo./err.rb
没有改变。
我可以运行ruby err.rb
,但这会产生与作者得到的结果不同的结果。即通过运行 ruby err.rb 我得到
out
error
有人可以解释为什么我在尝试使用反引号运行它时遇到权限错误,以及使用反引号运行它的总体目的是什么。