저는 매우 기본적인 쉘 스크립트를 사용하여 jar 파일을 실행하고 있습니다(NAS 시작 시 실행하는 데만 필요합니다). 그러나 다소 예상치 못한 동작이 발생했습니다.
스크립트는 다음과 같습니다.
java -jar myJar.war --inputParam=10101
myJar가 시작된 후 NumberFormatException
유효한 숫자 형식이 아닌 메시지가 발생합니다. "10101
문제는 이것이 어디에서 오는가 하는 것입니다 "
. 이 동작을 방지하려면 어떻게 해야 합니까?
스크립트를 사용하지 않고 수동으로 실행하면 스크립트가 나타나지 않기 때문에 똑같은 명령이 작동합니다 "
.
매우 감사합니다!
편집: 원본 파일의 16진수 덤프:
0000000 / u s r / l o c a l / j r e / b
0000010 i n / j a v a - j a r / s h
0000020 a r e / m a t h u - g o / j e n
0000030 k i n s . w a r - - h t t p P
0000040 o r t = 1 0 1 0 1 \r \n
모든 제안에 감사드립니다.
답변1
문제는 스크립트 파일의 줄 끝에 있는 캐리지 리턴입니다( \r
의 출력에 표시됨 hexdump -C
). 이것은 DOS 줄 종결자이지만 Unix에서는 캐리지 리턴 문자가 인수의 일부가 됩니다 java
.
오류 메시지는 다음과 같이 표시됩니다 "10101"
(Java는 메시지에서 해석할 수 없는 문자열을 인용합니다). 그러나 캐리지 리턴은 인쇄할 때 커서를 줄의 시작 부분으로 반환하므로 마지막 항목은 "
줄의 시작 부분에 인쇄됩니다. 오류 메시지 읽기 조금 이상한 것 같습니다.
Unix 텍스트 편집기에서 스크립트를 다시 입력하거나 dos2unix
원본 파일을 실행하면 이 문제를 해결할 수 있습니다.
#!
또한 스크립트 상단에 - 줄이 있어야 합니다. 예를 들어, #!/bin/sh
스크립트의 첫 번째 줄로 삽입하면 스크립트가 /bin/sh
인터프리터로 실행됩니다.