在试图了解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"
Run Code Online (Sandbox Code Playgroud)
他尝试运行它的第一种方法是使用Kernal#`(反引号)
>> `./err.rb`
err
=> "out\n"
Run Code Online (Sandbox Code Playgroud)
这说明了在使用反引号运行时
Run Code Online (Sandbox Code Playgroud)STDERR is output, but not captured STDOUT is captured
当我试图在我的系统上复制它时,我收到了一个权限错误
localhost:sites mike$ `./err.rb`
-bash: ./err.rb: Permission denied
Run Code Online (Sandbox Code Playgroud)
我./err.rb没有改变就尝试了sudo .
我可以跑,ruby err.rb但产生的结果与作者得到的结果不同.即通过运行ruby err.rb我得到
out
error
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么我试图用反引号运行它时会遇到权限错误,而且通常用反引号运行它的目的是什么.
尝试添加权限执行,使用"chmod + x that_file_name"执行使用格式"./file"'文件'需要具有执行权限
它在ruby时运行,因为ruby具有执行权限,它只是读取该文件.
试试这个
localhost:sites mike$ chmod +x err.rb
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |