루비 Command Line:어떻게 보낼 수 있습니 CTRL-C 명령을 통해 텍스트에서는 명령줄?

StackOverflow https://stackoverflow.com/questions/1616982

문제

나를 만들려고 간단 자동화 물방울을 것이다 style.less 파일 삭제는 그것으로 실행한 다음 적은 명령:

$ LESSC {DROPPED_FILE} --watch

는 모니터에 파일 내가 떨어에서 변경 사항에 대해 다음 자동으로 업데이트 출력 style.css

참고:나 적게 사용을 동적으로 작성 CSS 파일이 있습니다.더 많은 정보 .

기본적인 물방울이 잘 작동합니다.

  1. 삭제된 파일을 전달 변수로;이 목적을 위해: {MY_VAR}.
  2. 실행 쉘 스크립트 /usr/bin/ruby 쉘 다음과 같이 system("lessc {MY_VAR} --watch &")

이 좋은 작품을 그러나 내가 원하는 시계--를 중지에 종료 자동화 앱입니다.

적은 설명서를 말한다면 CTRL-C 기는 동안에서의 명령 라인에 포탄을 중단 스크립트입니다.

하지만 내가 아니에요 때문에 터미널 내의 창(명령을 전달되는 배경에)내가 알지 못하는 방법을 중단 스크립트입니다.

후에도 자동화.되는 폐쇄 style.less 파일은 여전히 감시에 대한 변경 사항 및 이에 대응하여 생성 style.css 는 여전히 다시 작성되고있다.

그래서 기본적으로 전달해야 중단에서 명령을 종료한다.app.

내가 생성된 간단한 팝업에서 클릭 응용 프로그램을 닫 후에 전달하는 또 다른 명령을 수 있습니다..

이것은 부분이 내려고 실패했을 중지하는 스크립트입니다.

가 명령줄 기능을 하는 행위와 동일 누르면 CTRL-C 명령?내가 어떻게 전달하이 최고의 쉘?

도움이 되었습니까?

해결책

면 CTRL-C 콘솔에서,이 보내는 표준입력을 통해 귀하의 프로그램.Bash(또는 당신이 무엇을 사용하여)처리 CTRL-C 특별하다.Bash 신호를 보내는 과정입니다.의 경우에는 CTRL-C 이것은 SIGINT.를 보내는 신호를 프로그램을 필요가 없이 그것의 pid.다음을 보낼 수 있는 신호를 pid.을 얻을 수 있 pid 당신으로 프로세스를 시작할 수 있습니다.

p= IO.popen("lessc #{file} --watch")
pid= p.pid
Process.kill("INT", pid)

루비에서 적어도 3 있습니다 다른 방법으로 실행한 무언가이다.

`lessc #{file} --watch` # returns stdout after exit
system("lessc #{file} --watch") # returns the integer return value after exit
Io.popen("lessc #{file} --watch") # returns imidietly an io object, where STDIN and STDOUT can be written and read

당신이 사용되는 system("lessc #{file} --watch&") 또한 반 imidietly 하지만 항상 0 을 반환합니다.

다른 팁

힌트:무엇^C 제어-C 에서 수행합니다.

(그렇지 않을 보내)등을 사용할 수 있습니다.

설명에서 힌트:PDF 에 대해 이야기 신호.참고 어디 그것은 또한에 대해 이야기^C.귀하의할 수 있는 수동으로 보내는 신호가 필요합니다.

키를 누를 때^C 터미널에서 그것은 일반적으로 전송합 SIGINT 신호를 프로그램을 실행합니다.당신은 이러한 신호를 보낼 수 있습니다 루비에서뿐만 아니라.작업에 대한 자세한 내용은 프로세스(그리고 신호를 보내)에서 루비: http://whynotwiki.com/Ruby_/_Process_management.

행복합니다.

적도 종료를 받을 때"q"문자,나는 생각한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top