脚本整数以“为前缀

0 java shell-script quoting arguments

我正在使用一个非常基本的 shell 脚本运行一个 jar 文件(我实际上只需要它在 NAS 启动时运行)。但是,我得到了一些相当意外的行为:

脚本如下所示:

java -jar myJar.war --inputParam=10101
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

感谢所有的建议。

Kus*_*nda 5

问题在于脚本文件中行尾的回车(\r在 的输出中可见hexdump -C)。这是一个 DOS 行结束符,但在 Unix 上,回车将是java.

错误消息会说"10101"(Java 会引用它在消息中难以解释的字符串),但是由于回车在打印时将光标返回到行的开头,所以最后一个"会打印在行的开头使错误消息看起来有点奇怪的行。

在 Unix 文本编辑器中重新键入脚本,或运行dos2unix原始文件,将解决这个问题。

另请注意,脚本#!顶部应有一个-line。例如,#!/bin/sh作为脚本的第一行插入将使脚本/bin/sh作为其解释器运行。