スクリプト定数の前に

スクリプト定数の前に

私は非常に基本的なシェルスクリプトを使用して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インタプリタとして実行されます。

関連情報