Project

General

Profile

Actions

Feature #17994

open

Clarify `IO.read` behavior and add `File.read` method

Added by mame (Yusuke Endoh) over 3 years ago. Updated over 3 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:104327]

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:

  1. The rdoc of IO.read does not explain the behavior to disable a subprocess invocation.
  2. 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.

https://github.com/ruby/ruby/pull/4579

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0