Feature #3348
closedrubyspec: Kernel.spawn redirects both STDERR and STDOUT to the given name ERROR
Description
=begin
遠藤です。
spawn のリダイレクトの引数で :out => "foo" としたとき、ファイル foo が存在
しなければ作ってくれますが、[:out, :err] => "foo" だと作ってくれません。
ruby -e 'pid = spawn("echo", "foo", [:out, :err] => "foo"); Proces.wait pid'
これは意図的でしょうか。
うっとうしいことに、rubyspec がこの挙動に依存して失敗するようになりました。
配列の中がすべて :out か :err だったら O_CREAT|O_TRUNC にするパッチです。
反対がなければコミットします。
diff --git a/process.c b/process.c
index 9e52392..4ca6ed3 100644
--- a/process.c
+++ b/process.c
@@ -1342,7 +1342,19 @@ check_exec_redirect(VALUE key, VALUE val, VALUE options)
key = check_exec_redirect_fd(key);
if (FIXNUM_P(key) && (FIX2INT(key) == 1 || FIX2INT(key) == 2))
flags = INT2NUM(O_WRONLY|O_CREAT|O_TRUNC);
-
else
-
else if (TYPE(key) == T_ARRAY) {
-
int i;
-
for (i = 0; i < RARRAY_LEN(key); i++) {
-
VALUE v = RARRAY_PTR(key)[i];
-
VALUE fd = check_exec_redirect_fd(v);
-
if (FIX2INT(fd) != 1 && FIX2INT(fd) != 2) break;
-
}
-
if (i == RARRAY_LEN(key))
-
flags = INT2NUM(O_WRONLY|O_CREAT|O_TRUNC);
-
else
-
flags = INT2NUM(O_RDONLY);
- }
- else
flags = INT2NUM(O_RDONLY);
perm = INT2FIX(0644);
param = hide_obj(rb_ary_new3(3, hide_obj(rb_str_dup(path)),
--
Yusuke Endoh mame@tsg.ne.jp
=end
Updated by akr (Akira Tanaka) over 14 years ago
=begin
2010年5月27日5:14 Yusuke ENDOH mame@tsg.ne.jp:
spawn のリダイレクトの引数で :out => "foo" としたとき、ファイル foo が存在
しなければ作ってくれますが、[:out, :err] => "foo" だと作ってくれません。ruby -e 'pid = spawn("echo", "foo", [:out, :err] => "foo"); Proces.wait pid'
これは意図的でしょうか。
うっとうしいことに、rubyspec がこの挙動に依存して失敗するようになりました。配列の中がすべて :out か :err だったら O_CREAT|O_TRUNC にするパッチです。
反対がなければコミットします。
その挙動は悪くないと思いますが、1.9.1 と非互換ですねぇ。¶
[田中 哲][たなか あきら][Tanaka Akira]
=end
Updated by mame (Yusuke Endoh) over 14 years ago
=begin
遠藤です。
2010年5月27日6:54 Tanaka Akira akr@fsij.org:
配列の中がすべて :out か :err だったら O_CREAT|O_TRUNC にするパッチです。
反対がなければコミットします。その挙動は悪くないと思いますが、1.9.1 と非互換ですねぇ。
うーん。そうですねえ。
:out => "foo", :err => "foo" はどうなるべきかとか、[:in, :out] => "foo"
には何を期待するのかとか、仕様レベルで検討しないと行けない気がしてきたの
で、ここだけ焦って直す必要はない気がしてきました。
このチケットは 1.9.x にして、今は rubyspec 側を修正しておきます。
--
Yusuke Endoh mame@tsg.ne.jp
=end
Updated by naruse (Yui NARUSE) over 13 years ago
- Status changed from Open to Assigned
- Assignee set to akr (Akira Tanaka)
- Target version set to 2.0.0
- ruby -v set to 1.9
Updated by mame (Yusuke Endoh) almost 12 years ago
- Target version changed from 2.0.0 to 2.6
ちゃんとチケット整理しなかったからまた直す機会を逸してしまった。すみません。
--
Yusuke Endoh mame@tsg.ne.jp
Updated by akr (Akira Tanaka) over 11 years ago
- Assignee changed from akr (Akira Tanaka) to mame (Yusuke Endoh)
この機能ですが、Ruby 2.1 で minor incompatibilities を許容するならそろそろ入れてもいいんじゃないでしょうか。
Updated by akr (Akira Tanaka) over 11 years ago
- Tracker changed from Bug to Feature
Updated by kosaki (Motohiro KOSAKI) over 11 years ago
この機能ですが、Ruby 2.1 で minor incompatibilities を許容するならそろそろ入れてもいいんじゃないでしょうか。
わたしも入れていいと思います。
Updated by naruse (Yui NARUSE) over 11 years ago
- Target version changed from 2.6 to 2.1.0
Updated by hsbt (Hiroshi SHIBATA) almost 11 years ago
- Target version changed from 2.1.0 to 2.2.0
Updated by akr (Akira Tanaka) over 10 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset r45828.
- process.c (check_exec_redirect): Open the file in write mode for
redirect from [:out, :err].
Proposed and implemented by Yusuke Endoh.
[ruby-dev:41430] [Feature #3348]