Actions
Feature #17994
openClarify `IO.read` behavior and add `File.read` method
Feature #17994:
Clarify `IO.read` behavior and add `File.read` method
Status:
Open
Assignee:
-
Target version:
-
Description
IO.read creates a subprocess when a given file name starts with a | character.
irb(main):001:0> IO.read("| ls /etc/passwd")
=> "/etc/passwd\n"
To disable this feature, File.read can be used.
irb(main):002:0> File.read("| ls /etc/passwd")
(irb):2:in `read': No such file or directory @ rb_sysopen - | ls /etc/passwd (Errno::ENOENT)
So, as far as I know, File.read is more prefereable to IO.read if a user want to just read a file.
However, in terms of the implementation, there is no definition of File.read. File.read invokes IO.read because IO is a superclass of File, and IO.read creates a subprocess only when its receiver is exactly the IO class.
I think there are two problems in the current situation:
- The rdoc of
IO.readdoes not explain the behavior to disable a subprocess invocation. - The rdoc does not have an entry for
File.read.
I've created a PR to address the two issues by clarifying IO.read behavior and defining File.read as an alias to IO.read.
Actions