From: Hideaki Takata Date: 2000-02-17T11:31:51+09:00 Subject: [ruby-list:20788] Re: rbsh たかたです。 :なかむらさんがかいたの > 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の関連団体だったり、結構、まともげなとこらしい。 #こまったことだな。 #個人的には、フリーウェアもシェアウェアも、 #フリーソフトと同じくハッカーの「作品」だと思ってるから、 #「シェアウェア嫌」なわけじゃないけど、 #やっぱり気持ち悪いんだよな たかたひであき