编辑注:此答案已过时。自 Ruby 2.6 版本开始,File.read 的行为有所不同,对于以“|”字符开头的文件名,它不会调用外部命令(issue,commit)。 因为File是IO类的子类并且没有read方法,所以当您调用File.read时,实际上是在调用IO.read, 这里没有任何区别。
IO.read('| whoami') # => "sourav\n"
。但是File.read('| whoami')
会引发Errno :: ENOENT。因此,在涉及安全问题的读取用户给定值时,IO.read并不安全。Rubocop也对此发出了警告。 - 15 Volts