[#44725] Set[Set[1]]==Set[Set[1]] は偽? — "5.5" <5.5@...>

5.5 です。

22 messages 2008/03/04

[#44782] $stdin.rewind が exec した子プロセスに伝わらない? — SATOH Fumiyasu <fumiyas@...>

さとうふみやす @ OSS テクノロジです。

11 messages 2008/03/17
[#44783] Re: $stdin.rewind が exec した子プロセスに伝わらない? — Kazuhiro NISHIYAMA <zn@...> 2008/03/17

西山和広です。

[ruby-list:44789] Re: $stdin.rewind が exec した子プロセスに伝わらない?

From: Kazuhiro NISHIYAMA <zn@...>
Date: 2008-03-18 09:58:13 UTC
List: ruby-list #44789
西山和広です。

At Tue, 18 Mar 2008 18:19:21 +0900,
SATOH Fumiyasu wrote:
> 
> シェルを介したくないんですが、IO.popen でできましたっけ?

"-"でpopenしてexecでできそうです。


> コマンドインジェクションの可能性とか、シェルのメタ文字を
> エスケープとか、セキュリティの不安や不確実性を
> 対応したり考えるのが嫌なので。なので、Kernel#system も:
> 
>   system([cmd, cmd], args)
> 
> としています。

普通は複数引数のsystemの方が簡単に安全になるので、
私も普通は複数引数を使っています。

argv[0]をわざわざ指定したいことはあまりないので、
そこは違いますが。


> 我ながらうまく書けた (自画自賛 :-) と思っているんですが、
> ダメ出しあるなら頂けると嬉しいです。> all

ダメ出しというより好みの問題に近いですが、Process.forkは
ブロック付きの方が子プロセスはここだけ、という感じがするし、
exit!を忘れてもブロックから抜けることがないので便利です。

exit!(1)は失敗という意味だけでいいのならexit!(false)という
のもあります。

unless stdout_reader_th.join(@timeout)というのは
スレッドをnilかfalseを返す可能性がある実装に変えて
しまうとはまりそう、と思ってしまいました。


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)

In This Thread