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