2012-10-07 3 views
5

저는 스칼라 초보자이고 쉘 명령을 호출하는 래퍼를 작성하고 있습니다. 현재 지정된 디렉터리의 파이프가있는 셸 명령을 호출하려고합니다. 파이프는 쉘의 기능 것을,스칼라 - 파이프가있는 쉘 명령

runCommand("ps -eF | grep -i foo", new File(".")); 

먼저 생각 : 예를 들어, 그러나 나는 파이프를 사용할 수 없습니다이 유틸리티를

def runCommand(command: String, directory: File): (Int, String, String) = { 

    val errbuffer = new StringBuffer(); 
    val outbuffer = new StringBuffer(); 

    //run the command 
    val ret = sys.process.Process(command, directory) ! 
    //log output and err 
    ProcessLogger(outbuffer append _ + "\n", outbuffer append _ + "\n"); 

    return (ret, outbuffer.toString(), errbuffer.toString()); 
} 

:

내가 간단한 유틸리티를 쓴이를 달성하기 위해 그래서 "/ bin/sh -c ps -eF | grep -i foo"를 시도했지만 파이프 오른쪽의 표현식이 무시 된 것 같습니다.

나는 또한 명령을 실행 해 보았습니다! 구문 (sys.process._ 패키지),하지만 난, "cd"를 사용하지 않고 지정된 디렉토리에서 명령을 호출하는 방법을 알아낼 수 없습니다.

조언을 해주실 수 있겠습니까? 정확하게 어떻게 할 수 있습니까?

+0

@xhochy합니다. 아무도 실수로 사용할 수 없도록 주석을 제거했습니다. :) –

답변

6

변경

val ret = sys.process.Process(command, directory) ! 

val ret = sys.process.stringSeqToProcess(Seq("/bin/bash", "-c", "cd " + directory.getAbsolutePath + ";" + command)) 

또는 직접 스칼라에서 제공하는 마법을 사용할 수 있습니다 : OK

import.scala.sys.process._ 
val ret = "ps -ef" #| "grep -i foo" ! 
+0

불행히도 그것은 작동하지 않았다. 이 오류가 발생합니다. -eF : -c : 0 행 : 예기치 않은 EOF와 일치하는 '' '를 찾습니다. -eF : -c : 1 행 : 구문 오류 : 예기치 않은 파일 끝 – altanis

+0

@altanis 아, 스칼라가 '때로는 틱. 내 대답은 작동해야하는 솔루션으로 업데이트되었습니다. 마지막으로 함수로 파이프를 입력하면 Scala 마법을 사용하는 것이 가장 좋습니다. – xhochy

+0

@altanis - 명령에 중복 된 인용문이있는 것 같습니다. – Rogach