1

注: より良いタイトル/質問を思いついた場合は、遠慮なく提案してください。この質問を短い文で表現する方法がわかりませんでした。

コマンド ライン マスターマインド ゲームを作成しました。ゲームをプレイするにはplay.rb、コマンド ラインに入力します。

play.rbゲームを起動する Ruby スクリプトです。スクリプト内で、ゲームには というインターフェイスが送信されますCommandLineInterface

GUI (私は Limelight と呼ばれる Ruby GUI を使用しています) を使用してプレイしたい場合はcdlimelightディレクトリに移動して入力limelight open productionすると、GUI が開きます。

、、およびmastermind_gameディレクトリを含むディレクトリがあります。ディレクトリにはディレクトリが含まれます。libspeclimelightlimelightproduction

今、私はいくつかの変更を加えています。コマンドラインでスクリプトに引数を渡すことができます。play.rb "command line game"またはを入力しますplay.rb "limelight game"

ARGVコマンドラインで渡される引数の配列です。

if ARGV.include?("command line game")
    interface = CommandLineInterface.new
elsif ARGV.include?("limelight game")
    interface = LimelightInterface.new
end

コマンド ライン ゲームをプレイしたい場合は、入力するplay.rb "command line game"と問題なく動作します。

play.rb "limelight game"コマンド ラインで入力して、GUI を開くことができるようにしたいと考えています。ではARGV、引数"limelight game"が見つかるため、interfaceに設定されLimelightInterface.newます。クラス内でLimelightInterface、initialize メソッドで GUI を開く必要があります。limelight open production基本的に、コマンド ラインで入力するのと同じ機能を持つ必要があります。

これが可能かどうか、またはその方法がわからないので、助けていただければ幸いです。ありがとう!

rvm use jruby編集:スクリプトに次の行を含めてコマンドを実行しようとしています:

system("rvm use jruby")

「RVM は関数ではありません。'rvm use ...' でルビーを選択しても機能しません。」

4

2 に答える 2

0

ライアン、システムを呼び出すにはいくつかの方法があります。

バックティック: ruby -e 'p ARGV' '1 2' '3 4' # => "[\"1 2\", \"3 4\"]\n"

%x リテラル (任意の区切り文字を使用できることに注意してください。括弧に限定されません)

%x(ruby -e 'p ARGV' '1 2' '3 4') # => "[\"1 2\", \"3 4\"]\n"

systemコマンド。ここでの違いは、stdin / out / err on を通過させることです。(上記は標準出力を返します。これはプロセスの標準出力に出力します)。

system('ruby', '-e p ARGV', '1 2', '3 4')
# >> ["1 2", "3 4"]

さらに洗練された使用法が必要な場合は、stdlib のopen3のようなものを使用すると、かなりうまくいきます。本当に大きな銃が必要な場合 (あなたのようには聞こえません)、gem open4があります。


編集:

次のようなことをしたいようです:

require 'open3'

bash_script = <<SCRIPT
source "$HOME/.rvm/scripts/rvm"
rvm use jruby
ruby -v
exit
SCRIPT

out, err, status = Open3.capture3 'bash', stdin_data: bash_script
puts out
# >> Using /Users/joshcheek/.rvm/gems/jruby-1.6.7
# >> jruby 1.6.7 (ruby-1.8.7-p357) (2012-02-22 3e82bc8) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_29) [darwin-x86_64-java]

しかし、正直なところ、あなたの環境に jruby をセットアップする正当な方法がたくさんあるため、これはあなたの状況にとって良い解決策ではないと思います。脚光を浴びるバイナリが存在することを確認し、存在しない場合は環境を修正するようにユーザーに指示する方がよいと思います。

于 2012-09-10T18:54:06.660 に答える
0

タイトルをグーグルで調べた最初の結果は次のとおりです。http://tech.natemurray.com/2007/03/ruby-shell-commands.html

それがあなたが必要としているものではない場合、私は質問を理解していません。

于 2012-09-10T18:53:18.753 に答える