【问题标题】:How do you call a java program in bash where the classpath has a whitespace?如何在类路径有空格的 bash 中调用 java 程序?
【发布时间】:2016-08-20 17:18:25
【问题描述】:

假设我有一个名为 white space 的文件夹,其中包含一个名为 foo 的类文件。

在命令行上,我可以通过下面的命令轻松调用foo程序

java -cp "white space/" foo

它会正常工作的。

我想将整个命令设置为 Bash 中的变量并调用此变量而不是整个命令本身。

所以,假设我将命令设置为以下

bar='java -cp "white space/" foo'

我尝试通过 $bar 调用命令,但我不断收到错误消息:

Error: Could not find or load main class space

你会如何解决这个问题?

【问题讨论】:

  • 你能像在 java 中那样在 bash 中转义 char 吗?所以它看起来像这样:bar="java -cp \"white space/\" foo"?
  • 展示实际失败的代码怎么样?如果没有看到您如何尝试使用 $bar,我们无法真正回答。换句话说,提交一个minimal reproducible example
  • 请注意,/ 实际上并不是目录名称的一部分。最好省略它。

标签: java bash command-line-interface


【解决方案1】:

不要使用变量来存储整个命令行,正是因为你不能容纳空格。使用数组,最好只保存选项并单独指定命令。

options=(-cp "white space/" foo)
java "${options[@]}"

或者,定义一个函数:

bar () {
    java -cp "white space/" foo
}

【讨论】:

    【解决方案2】:

    事情的解释不同,因为解析输入命令和使用参数启动外部程序是 bash 完成的两个不同步骤,而这里第一步的一部分是失败的。

    解决办法是:

    eval "$bar"
    

    更多详情请见:https://stackoverflow.com/a/11065196/1871033

    【讨论】:

    • eval 是一个糟糕的解决方案。使用@chepner 的答案中的数组或函数。
    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2013-07-08
    • 2014-05-18
    • 2014-07-17
    相关资源
    最近更新 更多