なかだです。

http://znz.s1.xrea.com/t/?date=20040213#p03 にまとめられている
ように、パイプを使ってシェルを経由しない方法がありません。また、
パイプを使わないで子プロセスを非同期で実行する方法もありません。
ということで、拡張&追加してみました。

--- IO.popen([prog, *args], mode = "r")
    systemやexec同様、IO.popenの第一引数をArrayにしたときはシェ
    ルを介さずに実行する

      IO.popen(["/bin/echo", "string (with meta-characters)"])

--- Process.spawn(command)
--- Process.spawn(prog, *args)
    子プロセスを非同期で実行する。引数はexec, systemと同じ。非
    同期で実行できない環境では、すでに終了しているかも知れない。

http://nokada.jin.gr.jp/ruby/spawn.diff

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦