2012-11-03 1 views
0

우분투 12.04레일에서 시스템 호출에 arguaments를 전달하지만 일반 루비 프로그램

시나 1.3.3

이유는 무엇입니까 루비 시스템 호출에 인수를 전달 (% X [] 또는``) 내 sinatra 애플 리케이션에서 '찾을 수 없음'오류를 줘? 동일한 코드가 동일한 디렉토리에서 실행되는 일반 루비 스크립트에서 정상적으로 작동합니다. 내가 예상대로 "루비 test.rb"나는 콘솔에서 현재 디렉토리의 내용을 얻을 그것을 실행하면

나는이

output = %x["ls"] 
p output 

같은 파일 test.rb 있습니다.

내가 지금과 같은 시스템 호출에 인수를 제공하기 위해 프로그램을 수정하는 경우

는 :

output = %x["ls sub_dir/"] 
p output 

나는 예상대로, 현재 디렉토리에 앉아 sub_dir의 내용을 얻을.

지금까지 그렇게 좋았습니다.

require 'rubygems' 
require 'bundler/setup' 
require 'sinatra' 

post "/" do 
output = x["ls"] 
return output 
end 

포스트 호출에 응답은 "/"예상대로, 'sub_dir'포함 현재 디렉토리의 내용을 반환하기 :

는 지금은 포스트 방법과 신트라 응용 프로그램을 만드는 경우.

내가 지금처럼시나 응용 프로그램에 시스템 호출에 인수를 추가하려고하면 :

require 'rubygems' 
require 'bundler/setup' 
require 'sinatra' 

post "/" do 
output = x["ls sub_dir/"] 
return output 
end 

응답이 전무하고 콘솔에 오류가 :

쉬 : 1 : LS sub_dir/: 일반 루비 스크립트에서 호출 동일한 코드가, FR를 실행할 때 왜 내시나 응용 프로그램에서 시스템 호출에 매개 변수를 추가하는 것이, 충돌 않는 원인

를 찾을 수 없음 동일한 위치가 완벽하게 작동합니다.

그러나 여기에 표시된 'ls'예제는 실제로 실행해야하는 명령이 아니므로이 정보를 얻기 위해 다른 방법을 설명하지 마십시오. 필자는 실행해야하는 매개 변수로 파일 이름을 사용하는 실행 파일을 가지고 있는데, 이는 정확히 동일한 방식으로 작동합니다.

미리 감사드립니다. 응용 프로그램 관련 경로를 지정하려면

+0

상대적인 파일 이름 대신 완전한 파일 이름을 사용하려고 했습니까? 현재 작업 디렉토리가 때때로 바뀔 수 있습니다. 특히 실제 호스팅을 사용할 때 특히 그렇습니다. 전체 경로를 사용하면 이러한 변경 사항을 처리하고 일반적으로 사용자의 의도를 훨씬 명확하게 나타냅니다. –

+0

이것은 좋은 팁입니다. 감사합니다.하지만 불행히도, 나는 여전히 같은 문제가 있습니다. % x [ 'ls /']를 실행하면 같은 오류가 발생합니다. % x [ 'ls -l']을 실행하면 같은 오류가 발생합니다.이 문제는 파일 위치가 아니라 인수를 전달하려는 것과 같습니다. 다른 아이디어? – CHsurfer

답변

0

나는 같은 디렉토리에있는 다른 파일에 sinatra 앱을 다시 작성했습니다.

모든 것이 예상대로 작동합니다.

이유를 찾지 못했지만 원래 파일을 삭제하여 더 이상 시간을 잃어 버리지 않도록했습니다.

1

, 당신은이 같은 것을 사용할 수 있습니다

post "/" do 
path = File.join(File.dirname(__FILE__), "sub_dir") 
%x[ls #{path}] 
end 

을하지만,이 디렉토리의 내용을 나열하려면, 왜 루비에 그것을하지 ?

+0

이것은 좋은 팁입니다. 감사합니다.하지만 불행히도, 나는 여전히 같은 문제가 있습니다. 이 경우 동일한 오류를주는 path = "./sub_dir/"입니다. 실제로, % x [ 'ls -l']을 실행하면 같은 오류가 발생합니다. 문제는 파일 위치가 아닌 인수를 전달하려는 것으로 보입니다. 다른 아이디어? – CHsurfer

+0

'system 'ls -l''을 사용해 보셨나요? – polarblau

관련 문제