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")"