2009-10-24 2 views
3

나는 떨어졌다 그것으로 style.less 파일을 그것에 다음 LESS 명령을 실행하는 간단한 자동화 방울을 만들려고 오전 :Ruby 명령 줄 : 명령 줄의 텍스트를 통해 CTRL-C 명령을 보내려면 어떻게해야합니까?

$ LESSC {DROPPED_FILE} --watch 난 어떤 변경에 떨어졌다 파일을 모니터링 할

그러면 자동으로 출력을 업데이트합니다. style.css

참고 : CSS 파일을 동적으로 작성하려면 LESS를 사용하고 있습니다. 더 많은 정보는 here입니다.

기본 물방울이 효과적입니다.

  1. 삭제 된 파일은 변수로 전달됩니다. 이 목적을 위해 : {MY_VAR}. 이 위대한 그러나 나는 --watch가 자동화 응용 프로그램을 종료시 중지 할 작동 system("lessc {MY_VAR} --watch &")

을 다음과 같이

  • 은 내가 /usr/bin/ruby 쉘에서 쉘 스크립트를 실행합니다.

    LESS 설명서는 명령 줄 셸에서 CTRL-C 바로 가기 키를 눌러 스크립트를 중단합니다.

    하지만 터미널 창 (명령이 백그라운드에서 전달됨)에 없기 때문에 스크립트를 중단하는 방법을 모르겠습니다.

    automator.app가 닫힌 후에도 style.less 파일은 여전히 ​​변경 사항이 감시되고 있으며 그에 따라 생성 된 style.css은 여전히 ​​재 작성됩니다.

    기본적으로 .app 종료시 abort 명령을 전달해야합니다.

    이 터미널 쉘에 다른 명령을 전달한 후 을 클릭하면 간단한 팝업이 생성되었습니다.

    내 모든 시도가 스크립트를 중지하는 데 실패한 부분입니다.

    CTRL-C 명령을 누르는 것과 같은 기능을하는 명령 줄 기능이 있습니까? 어떻게 이것을 쉘에 가장 잘 전달할 수 있습니까?

  • 답변

    6

    콘솔에서 CTRL-C를 누르면 STDIN을 통해 programm로 전송되지 않습니다. Bash (또는 무엇을 사용하든)는 CTRL-C special을 취급합니다. 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 
    

    는 또한 imidietly 반환 system("lessC#{file} --watch&")을 사용하지만 항상 내가`$의 lessc의 q`을하고 시도 ..

    +0

    화이트 시간을내어 주셔서 감사합니다. 하나의 간단한 질문이지만, 나는 명령 행 루비 물건에 정말로 참으로 새롭다. 그리고 지금까지 행운의 사본 복사와 붙여 넣기를했다. 나는이 경우에 온라인에서 찾을 수있는 지침을 따른다. 나는 명령을 실제로 어떻게 실행하는지 잘 모르겠다. 내게 준 .. 어떻게 내 터미널 인스턴스를 '루비'모드로 입력합니까? 또한 : 각 줄은 별도의 명령입니까? (첫 줄을 입력하고 'return'을 누른 다음 두 번째 줄을 누를 때 등등) – Jannis

    +0

    루비 태그를 보았을 때 루비 스크립트를 쓰고 싶다고 생각했습니다. – johannes

    0

    "q"문자가 수신되면 더 적게 종료됩니다.

    +0

    흠 0을 반환하고, 불행하게도 작동하지 않았다. 생각에 감사하지만, 많이 감사합니다. – Jannis

    1

    힌트 :^C Control-C정말은 쉘에 있습니까?

    (문자를 보내지 않음)

    힌트에 대한 설명 :PDF talks about signals.^C에 대한 내용도 참고하십시오. 필요에 따라 수동으로 신호를 보낼 수 있습니다.

    터미널에서^C를 누르면 정상적으로 SIGINT 신호가 실행중인 프로그램으로 전송됩니다. 이 신호는 Ruby에서도 보낼 수 있습니다. 루비에서 프로세스 작업 (및 신호 전송)에 대한 추가 정보 : http://whynotwiki.com/Ruby_/_Process_management.

    해피 코딩.

    +0

    터미널을 사용하지 않고 실제로 CTRL-C 키 조합을 눌러 스크립트를 중지 할 방법이 없다는 뜻입니까? – Jannis

    +0

    전혀 아닙니다. 대화 형 터미널은 단지^C를 가로 채고 특별한 일을하도록 만듭니다. 예를 들어 일반적으로^D와^Z와 동일합니다. 터미널이 직접하는 일을 할 수 있습니다. –

    +0

    PDF를 읽었지만 프로그래머가 아니기 때문에 이해하기가 어렵습니다. 장기적으로 볼 때이 작은 물방울을 만들어 내 워크 플로를 빠르게 만들고 싶었습니다. 그것은 나를위한 옵션이 아닌 것 같습니다. 힌트를 보내 주셔서 감사합니다.이 분야에 대한 지식이 더 많을 경우 더 잘 이해했을 것입니다. – Jannis

    관련 문제