bash 스크립트를 통해 Cygwin에서 JAVA 실행

bash 스크립트를 통해 Cygwin에서 JAVA 실행

cygwin에서 jar 파일을 실행할 수 없고 파일을 찾을 수 없다는 오류가 발생하는 문제가 발생했습니다.

더 쉬웠다면 bash에서 Java 소스 코드를 "번역"했을 것입니다. 그러나 불행히도 구현 기능으로 인해 이를 달성하는 데 꽤 큰 장애물이 있으므로 jar 파일을 사용해야 합니다.

이제 이 작업을 수행하는 방법을 알아내기 위해 꽤 많은 연구를 수행했지만 성공할 수 없어 cygwin을 사용해야 합니다.

이것이 내가 기본적으로 하고 싶은 일이다:

lockfile="$specialfolder/$passedargument.lock
java -jar `cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar -joption cygpath -w $lockfile`

또한 다음과 같이 이중 백틱을 사용해 보았습니다.

pathtooutfile="${some_other_vars}/${that}_${work}.out"
java -jar `cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar` -joption `cygpath -w $lockfile`

$JAVA_HOME 환경 변수를 사용해 보았지만 잘 작동하지 않았습니다. 라는 변수가 있다는 점을 언급할 가치가 있습니다.잠금 파일var는 다음과 같이 정의됩니다.

 homedir= "/cygdrive/driveletter/folder/folder"
 specialfolder= "$homedir/foler/$passedargument"
 passedargument= $1 ###argument passed with execution of bash script
 lockfile= "$specialfolder/$passedargument"

계속해서 발생하는 오류는 다음과 같습니다.오류: jarfile에 액세스할 수 없습니다. 사용권한을 777로 수정했는데 그것도 안되네요. 다음과 같이 언급될 수도 있다.-j 옵션또는-얻다또는-풀어 주다에 해당잠금 파일jar가 수행하는 작업 중 하나는 파일을 잠가서 여러 스크립트 실행을 관리하는 것입니다. 나는 약간 붙어 있으므로 어떤 조언이라도 크게 감사하겠습니다. 나는 이것이 cygwin 문제에 더 가깝다고 생각합니다.

답변1

시도해 봤어?cygpath -w -a .....

-a절대 경로를 반환합니다 .

예를 들어

$ cygpath -w ./screenshot.jpg
screenshot.jpg

$ cygpath -w -a ./screenshot.jpg
C:\cygwin64\home\tony\screenshot.jpg

답변2

당신의 표정이라면

`cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar`

공백이 포함되어 있으며 결과를 Java에 단일 토큰으로 전달하려면 공백을 큰따옴표로 묶어야 합니다. 쉘 추적이 켜져 있으면 표현식과 결과를 이해하는 데 도움이 될 수 있습니다 set -x.

추가 자료:

답변3

Windows 절대 경로는 항상 드라이브 문자로 시작합니다(예: C:\folder1\folder2\item.ext. Cygwin 절대 경로는 모든 UNIX/Linux 파일 시스템과 마찬가지로 로 시작 /하지만 메타폴더를 제공하여 cygdrive다양한 Windows 드라이브 문자를 파일 시스템 트리에 원활하게 매핑할 수 있습니다(예: ) /cygdrive/c/folder1/folder2/item.ext. (실제로 제가 제공한 두 가지 예제 파일 경로는 동일한 파일 시스템 개체에 해당합니다.)

여기서 근본적인 문제는 경로가 유효하지 않다는 것입니다. 이것은 시작하지 않지만 /무언가를 참조하기 때문에 상대 경로입니다.좋다Windows 드라이브 문자 및 경로에 해당하는 절대 경로:

cygpath -w ./cygdrive/driveletter/folder/folder/javafile.jar

주요 포인트 없이 다음과 같은 의미일 수도 있다고 생각합니다.

cygpath -w /cygdrive/driveletter/folder/folder/javafile.jar

참조를 수정하고 일반적으로 정리하면 스크립트 조각이 다음과 같이 보입니다.

lockfile="$specialfolder/$passedargument.lock"
java -jar "$(cygpath -w /cygdrive/driveletter/folder/folder/javafile.jar)" -joption "$(cygpath -w "$lockfile")"

관련 정보