我正在使用一个非常基本的 shell 脚本运行一个 jar 文件(我实际上只需要它在 NAS 启动时运行)。但是,我遇到了一些相当意外的行为:
脚本如下所示:
java -jar myJar.war --inputParam=10101
myJar 启动 - 然后抛出一条不是有效数字格式NumberFormatException
的信息。"10101
问题是:它从哪里来"
?我可以尝试什么来避免这种行为?
如果我手动运行它而不使用脚本,那么完全相同的命令就会起作用,因为没有"
出现脚本。
非常感谢你!
编辑:原始文件的十六进制转储:
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
作为其解释器运行。