문제

OS X에서는 .Exec 무언가를 시도하고 있지만 경로에 공간이 포함되어 있으면 작동하지 않습니다. 나는 따옴표로 경로를 둘러싸고, 공간을 피하고, u0020을 사용해 보았습니다.

예를 들어, 이것은 작동합니다.

Runtime.getRuntime().exec("open /foldername/toast.sh");

그러나 공간이 있다면이 작업 중 어느 것도 없습니다.

Runtime.getRuntime().exec("open /folder name/toast.sh");

Runtime.getRuntime().exec("open \"/folder name/toast.sh\"");

Runtime.getRuntime().exec("open /folder\\ name/toast.sh");

Runtime.getRuntime().exec("open /folder\u0020name/toast.sh");

아이디어?

편집 : 백 슬래시를 탈출했습니다 ... 여전히 작동하지 않습니다.

도움이 되었습니까?

해결책

이 문제에 대한 요약이 있습니다 Sun의 포럼... OS X에 국한되지 않은 꽤 일반적인 문제인 것 같습니다.

스레드의 마지막 게시물에는 제안 된 솔루션이 요약되어 있습니다. 본질적으로, 형태를 사용하십시오 Runtime.exec 그게 걸립니다 String[] 정렬:

String[] args = new String[] { "open", "\"/folder name/toast.sh\"" }; 

또는 (포럼에서도 이것이 효과가 있다고 제안합니다)

String[] args = new String[] { "open", "folder name/toast.sh" };

다른 팁

이 시도:

Runtime.getRuntime().exec("open /folder\\ name/toast.sh");

""는 문자열에 공간을 넣지 만 ""는 문자열에 ""를 넣고 껍질로 전달되며 쉘은 공간을 피할 것입니다.

그래도 작동하지 않으면 인수를 배열로 전달하고 각 인수에 대해 하나의 요소를 전달하십시오. 그렇게하면 껍질이 관여하지 않으며 기괴한 탈출이 필요하지 않습니다.

Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"});

Paul의 옵션은 작동하지만 여전히 공간을 피해야합니다.

Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"});

문자열 배열 사용에 대해 짜증나는 것은 각 매개 변수와 그 옵션이 자체 요소에 있어야한다는 것입니다. 예를 들어이 작업을 수행 할 수 없습니다.

Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"});

대신 그렇게 지정해야합니다.

Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top