스크립트 정수 앞에는 "

스크립트 정수 앞에는 "

저는 매우 기본적인 쉘 스크립트를 사용하여 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인터프리터로 실행됩니다.

관련 정보