注意:如果您想到更好的标题/问题,请随时提出建议。我不确定如何用一个简短的句子表达这个问题。从Ruby代码执行shell命令
我创建了一个命令行Mastermind游戏。要玩游戏,请在命令行输入play.rb
。
play.rb
是启动游戏的Ruby脚本。在脚本中,游戏被发送一个界面,称为CommandLineInterface
。
如果你想使用GUI玩(我使用Ruby的GUI称为Limelight系列),你cd
到limelight
目录,然后键入limelight open production
和GUI打开。
有一个mastermind_game
目录包含lib
,一个spec
和limelight
目录。 limelight
目录包含production
目录。
现在我正在做一些改变。您可以在命令行上将参数传递给脚本。您可以输入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
类中,我想要初始化方法来打开GUI。它应该具有与在命令行键入limelight open production
相同的功能。
我不确定这是可能的或者如何去做,所以任何帮助将不胜感激!谢谢!
编辑:我试图通过包括此行我的脚本来执行命令rvm use jruby
:
system("rvm use jruby")
我回来:“RVM不是一个函数,选择红宝石与“RVM使用...' 不管用。”
选择一种Ruby的系统命令不应该是必需的;您可以使用[.rvmrc](http://bre.overnothing.com/workflow/rvmrc/)文件来选择jruby。您可以将您要调用的内容存储在子目录中,并在那里创建一个'.rvmrc'文件。 –
好的,我创建了一个.rvmrc文件来指定我想要使用jruby。所以我所要做的就是将'system(“cd limelight”)'添加到我的脚本中,对吗?只需将'cd'放入目录,.rvmrc文件将运行jruby。我试图做到这一点,但似乎没有成功进入该目录。 – rzv
不,一个'.rvmrc'文件决定*在调用'ruby ...时运行哪个* Ruby,它不会启动Ruby。您需要将cd放入目录,然后启动您的脚本。 –