【问题标题】:White Space in Path is not being ignored in .sh file.sh 文件中不会忽略路径中的空格
【发布时间】:2017-04-23 02:09:13
【问题描述】:

我搜索了多个问题/回复,但没有找到适合我的。

我在 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" 修复它。

【问题讨论】:

  • 用单引号括起来。例如'C:/Program Files/Java/jre1.8.0_111/bin/java'
  • @0.sh 我也试过了,我仍然得到C:/bin/program.sh: line 127: C:\Program: No such file or directory 将更新帖子以反映它。
  • 这个[ -z "$JAVA_HOME"] 会产生错误。
  • 你试过 exec "$JAVA" ... 吗?
  • @m1771vw "$JAVA_HOME" 和第二个关闭 ] 之间应该有一个空格。

标签: bash shell git-bash


【解决方案1】:

问题是bash 在执行exec 命令之前将$JAVA 替换为其值。这意味着

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"

【讨论】:

    【解决方案2】:

    将 $JAVA 包裹在 exec 语句中,它会越过空格

    exec "$JAVA" ... 
    

    【讨论】:

    • "它会越过空白" 这并不完全正确。使用引号,空格成为单个参数字符串的一部分,而不是作为参数分隔符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2015-09-05
    • 2015-06-13
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多