たかたです。


:なかむらさんがかいたの
> install(笑)作業:
>
> cd /usr/bin
> ls -1 > rbsh.rb
> vi rbsh.rb
>  #それぞれのコマンドのラッパを書きまくる(笑)
> cd /usr/local/bin
> ls -1 > rbsh.rb
> 以下略
>
> で、使い方:
>
> require '/usr/bin/rbsh.rb'
> 以下略

いまのとこそんな立派なものじゃあないです。
eval.rbの最初で、ただ単にシェルとのパイプを用意して、コマンドをパイプ
に押し流してるだけ(笑)。なんせ、先週思い付きで考えて、これまでの総プ
ログラム時間数分という、ちゃちなもんです。シェルからの出力はだらだらと
STDIOに流れ出てくるだけ。対話型じゃないと使えない(笑)。

rbsh.rbのなかみ

# シェルの立ち上げ
shell = open("|bash", "w")

line = ''
indent=0
$stdout.sync = TRUE
print "rbsh> "
while TRUE
  l = gets
  unless l
    break if line == ''
  else
    line = line + l
    if l =~ /,\s*$/
      print "rbsh| "
      next
    end
    if l =~ /^\s*(class|module|def|if|case|while|for|begin)\b[^_]/
      indent += 1
    end
    if l =~ /^\s*end\b[^_]/
      indent -= 1
    end
    if l =~ /\{\s*(\|.*\|)?\s*$/
      indent += 1
    end
    if l =~ /^\s*\}/
      indent -= 1
    end
    if indent > 0
      print "rbsh| "
      next
    end
  end

# この下が、実質的なコマンド部分

  begin
    print eval(line).inspect, "\n"
  rescue
    begin
      shell.print(line)
    rescue
      $! = 'exception raised' unless $!
      print "ERR: ", $!, "\n"
    end
  end
  break if not l
  line = ''
  print "rbsh> "
end
print "\n"

ここまで。

bashの標準出力をRubyでどうにかして受け取っておかねえとおかしなことにな
るよなあ。一つのコマンドにReadableとWritableのふたつのIOを作る時にはど
うすりゃ良いんだろう。

#ところで、CRICっつーのは、SARAH(私的録音補償金管理協会)
#の支援を受けてたり
#JASRACの関連団体だったり、結構、まともげなとこらしい。
#こまったことだな。
#個人的には、フリーウェアもシェアウェアも、
#フリーソフトと同じくハッカーの「作品」だと思ってるから、
#「シェアウェア嫌」なわけじゃないけど、
#やっぱり気持ち悪いんだよな

たかたひであき