系统命令在Ruby中不起作用并返回false?

时间:2014-06-10 12:30:44

标签: java ruby ruby-on-rails-3

我想从Ruby运行一个Java程序,它是一个独立的应用程序。我在Ruby中使用以下命令:

system("cd /home/webserver/testproject"); 
system("sh testsh.sh")

我的Java项目在" / home / webserver / testproject"中可用,所以我使用第一个命令更改目录。 sh文件写入一个文件,其中包含运行我的主类的信息,并设置CLASSPATH环境变量来运行程序。当在Ruby之外执行此操作时,它可以正常工作,但不在Ruby内部。

2 个答案:

答案 0 :(得分:2)

每次运行时,

system都会创建一个新的子shell,因此您始终可以从当前目录开始。您需要的是使用Dir.chdir更改Ruby中的目录:

Dir.chdir("/home/webserver/testproject") do
  system "sh testsh.sh"
end

工作目录中的更改将仅应用于do ... end块内的代码。如果要对整个脚本进行永久更改,可以这样做:

Dir.chdir "/home/webserver/testproject"
system "sh testsh.sh"

答案 1 :(得分:1)

调用system("cd ...仅在命令范围内更改当前工作目录 。要在正确的目录中运行第二个命令,您需要链接它们:

system("cd /home/webserver/testproject && sh testsh.sh")