2014-10-14 5 views
0

Ruby에서 스크립트 대기열에 at 작업이 있어야합니다. 시스템 콜을하는 것은 쉽지만, system 또는 %x()이라는 백틱을 사용할 수 있습니다. 그러나 at 명령은 반드시 복수 행이어야하며 종료하려면 명령 입력 ctrl+d이 필요합니다. 동적으로 at 작업을 만들려면 어떻게해야합니까?스크립트에서 'at'작업 만들기

예 (루비) :

`at #{time}\nrun_other_script.rb\n:q` 

효과 :

at 2014-10-14 11:30 
at> run_other_script.rb 
at> <EOT> 

그러나 물론 내 예제는 작동하지 않습니다. 뭐야?

답변

2

at은 표준 입력에서 입력을 허용합니다.

w 모드 IO::popen를 사용하면 서브 프로세스에 입력을 보낼 수 있습니다

IO.popen("at #{time}", "w") { |f| 
    f.puts "run_other_script.rb" 
} 

또한 open3 모듈을 사용할 수 있습니다.

+0

전용 취소 명령을 보내야합니까, 아니면'popen' 블록의 끝에서 가정합니까? –

+1

@DevonParsons, EOF를 의미합니까? 당신은 그것을 할 필요가 없습니다. 명시 적으로하고 싶다면'f.close'를 호출 할 수 있습니다. – falsetru

+1

Ruby가 자식과의 연결을 닫을 것이므로 EOF가 자동으로 보내지 만 @falsetru에서 말하는 것처럼'f.close'를 사용하면됩니다. 그것도해라. 그러면 그것은 무엇이 일어나고 있는지 더 분명하게 만든다. 내장 된 동작에 의존 할 수도 있고, 더 명료하지만 중복 될 수도 있습니다. –