.sh 文件中没有忽略 Path 中的白色 Space
White Space in Path is not being ignored in .sh file
我搜索了多个问题/回复,但没有找到适合我的。
我正在 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 来击败白色 space
"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 中时白色 space 分隔符不起作用?或者这是一个完全不同的问题?
更新
将 $JAVA
括在引号中:"$JAVA"
修复了它。
将$JAVA包裹在exec语句中,它会看过去的白色space
exec "$JAVA" ...
问题是 bash
在执行 exec
命令之前用它的值替换了 $JAVA
。这意味着
exec $JAVA ...
变成
exec C:\Program Files\Java\jre1.8.0_111\bin\java
exec
仅在发生此替换后才能看到参数。 Program Files
中的 space 使它看起来像是 exec
的两个独立参数。第一个是 C:\Program
,第二个是 Files\Java\jre1.8.0_111\bin\java
。
要解决此问题,您需要将 Java 安装移动到路径中没有 space 的目录,或者您需要引用发送到 exec
的参数:
exec "$JAVA"
我搜索了多个问题/回复,但没有找到适合我的。
我正在 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 来击败白色 space
"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 中时白色 space 分隔符不起作用?或者这是一个完全不同的问题?
更新
将 $JAVA
括在引号中:"$JAVA"
修复了它。
将$JAVA包裹在exec语句中,它会看过去的白色space
exec "$JAVA" ...
问题是 bash
在执行 exec
命令之前用它的值替换了 $JAVA
。这意味着
exec $JAVA ...
变成
exec C:\Program Files\Java\jre1.8.0_111\bin\java
exec
仅在发生此替换后才能看到参数。 Program Files
中的 space 使它看起来像是 exec
的两个独立参数。第一个是 C:\Program
,第二个是 Files\Java\jre1.8.0_111\bin\java
。
要解决此问题,您需要将 Java 安装移动到路径中没有 space 的目录,或者您需要引用发送到 exec
的参数:
exec "$JAVA"