脚本整数以“为前缀

脚本整数以“为前缀

我正在使用一个非常基本的 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作为其解释器运行。

相关内容