我已经搜索了多个问题/回复,但没有找到适合我的问题。
我在Windows上,我试图通过Git Bash运行应用程序:
$ ./bin/program.sh config/program.properties
我得到的错误是:
C:/bin/program.sh: line 127: C:\Program: No such file or directory
我已将问题缩小为.sh
中的早期部分if [ -z "$JAVA_HOME" ]; then
JAVA="java"
else
JAVA="$JAVA_HOME/bin/java"
fi
而且,第127行有:
exec $JAVA ...
还有更多内容,但问题出在JAVA_HOME部分。我的JAVA_HOME是
C:\Program Files\Java\jre1.8.0_111\bin\java
我尝试了多种不同的方法来取代JAVA以击败空白
"C:\\Program Files\\Java\\jre1.8.0_111\\bin\\java"
"C:\\Program/ Files\\Java\\jre1.8.0_111\\bin\\java"
"C:/Program\ Files/Java/jre1.8.0_111/bin/java"
C:/"Program Files"/Java/jre1.8.0_111/bin/java
'C:/Program Files/Java/jre1.8.0_111/bin/java'
可能有更多组合,但我已经忘记了。这是Git Bash的问题吗?或者这是关于我不知道的.sh文件的东西?或者,当存储在$ JAVA中时,空白分隔符不起作用?或者这是一个完全不同的问题?
更新
将$JAVA
包含在引号中:"$JAVA"
修复它。
答案 0 :(得分:3)
问题是bash
在执行$JAVA
命令之前将exec
替换为其值。这意味着
exec $JAVA ...
变为
exec C:\Program Files\Java\jre1.8.0_111\bin\java
exec
仅在发生此替换后才会看到参数。 Program Files
中的空格使其看起来像是exec
的两个独立参数。第一个是C:\Program
,第二个是Files\Java\jre1.8.0_111\bin\java
。
要解决此问题,您需要将Java安装移动到路径中没有空格的目录,或者需要引用发送到exec
的参数:
exec "$JAVA"
答案 1 :(得分:1)
将$ JAVA包装在exec语句中,它将显示在空白区域
exec "$JAVA" ...