Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中调用类路径有空格的java程序?_Java_Bash_Command Line Interface - Fatal编程技术网

如何在bash中调用类路径有空格的java程序?

如何在bash中调用类路径有空格的java程序?,java,bash,command-line-interface,Java,Bash,Command Line Interface,假设我有一个名为whitespace的文件夹,其中包含一个名为foo的类文件 在命令行上,我可以通过以下命令在 java -cp "white space/" foo 它会很好的工作 我想在Bash中将整个命令设置为一个变量,并调用这个变量,而不是整个命令本身 因此,假设我将命令设置为 bar='java -cp "white space/" foo' 我尝试通过执行$bar来调用该命令,但始终收到一个错误消息: Error: Could not find or load main clas

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

在命令行上,我可以通过以下命令在

java -cp "white space/" foo
它会很好的工作

我想在Bash中将整个命令设置为一个变量,并调用这个变量,而不是整个命令本身

因此,假设我将命令设置为

bar='java -cp "white space/" foo'
我尝试通过执行
$bar
来调用该命令,但始终收到一个错误消息:

Error: Could not find or load main class space

如何解决这个问题?

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

options=(-cp "white space/" foo)
java "${options[@]}"
或者,定义一个函数:

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

事情的解释是不同的,因为解析输入命令和启动带有参数的外部程序是bash完成的两个不同步骤,这里第一步的一部分已经完成

解决办法是:

eval "$bar"

有关更多详细信息,请参阅:

能否像在java中一样在bash中转义char?所以它看起来是这样的:
bar=“java-cp\”空白/\“foo”
?如何呈现实际失败的代码?如果不了解您如何使用
$bar
,我们就无法真正回答。也就是说,请提供一个。注意,
/
实际上不是目录名的一部分。最好省略它。
eval
是一个糟糕的解决方案。使用@chepner答案中的数组或函数。