以下のコードはMac OS X上だと上手く動きますが、Linux上だと Errno::EIO: Input/output error @ io_fillbuf というエラーが起きます。 require 'pty' PTY.spawn("ls") do |r,w,pid| until r.eof? do puts r.readline end end どうやら、読み込んだ際にBSDだとnilになりますが、GNU/LinuxだとErrno::EIOが発生する仕様らしいです。 Ruby on Linux PTY goes away without EOF, raises Errno::EIO にあるように、resqueするSafePtyを作ることで回避できます。