2014-06-10 1 views
0

Ruby에서 독립 실행 형 응용 프로그램 인 Java 프로그램을 실행하고 싶습니다.Ruby에서 시스템 명령이 작동하지 않고 false를 반환합니까?

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

내 자바 프로젝트가 "/ 홈/웹 서버/testproject"에서 사용할 수 있습니다, 그래서 첫 번째 명령을 사용하여 디렉토리를 변경하고 : 루비에서 다음 명령을 사용하고 있습니다. sh 파일은 메인 클래스를 실행하기위한 정보가 들어있는 파일을 작성하고 프로그램 실행을 위해 CLASSPATH 환경 변수를 설정합니다. 루비 외부에서이 작업을 수행하는 경우 제대로 작동하지만 루비에서는 작동하지 않습니다.

답변

1

system("cd ...을 호출하면 명령 범위 내에서만 현재 작업 디렉토리 이 변경됩니다. 올바른 디렉토리에서 두 번째 명령을 실행하려면, 당신은 체인 그들에게 필요 : 당신은 항상 현재 디렉토리에서 시작되도록

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

고맙습니다. 그리고 한 가지 더 의심 스럽습니다. 실제로 저는 루비에서 캡처를 원하는 일부 로그 작성기 정보를 생성한다는 점에서 sh 파일을 실행 중입니다. –

+0

@ user2436481 그것은 탁월한 별도의 질문이 될 것입니다. 그러나 질문하기 전에 아마도 여기에서 답을 찾을 수 있습니다 : http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/ –

+0

http://pleac.sourceforge.net/pleac_ruby/processmanagementetc.html –

2

system 새 서브 쉘 당신이 그것을 실행할 때마다 수 있습니다. 당신은 무엇이 필요 Dir.chdir와 루비 내부의 디렉토리를 변경하는 것입니다 : 작업 디렉토리의 변화 만 do ... end 블록 내부의 코드에 적용됩니다

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

. 전체 스크립트의 변경 사항을 영구적으로 적용하려면 다음과 같이하십시오.

Dir.chdir "/home/webserver/testproject" 
system "sh testsh.sh" 
관련 문제