2017-02-08 56 views
1

我正在编写一个bash脚本以在内部Java应用程序服务器中启动java类。但是,在下面的命令中,类名替换期间会出现一些(')。这使得启动失败,因为mvn需要某种格式的命令。额外'在bash脚本中导致mvn失败

#!/bin/bash -x 

function launchClassInEngine { 
CLASS_NAME=`echo \"launch-in-engine $1\"` 

# echo as I would want it to "launch-in-engine MyClass" 
echo ${CLASS_NAME} 

# The problem starts here 
# output: mvn '-Dclass="launch-in-engine' MyClass 'id=20"' 
mvn -Dclass=\"launch-in-engine $1 $2\" 

# so the problem is that while substituting the string at -Dclass= bash adds ' 
# I do not know how to fix this. Any idea or pointers 
} 


# Expect the below call to run 
# mvn -Dclass="launch-in-engine MyClass id=20" 
launchClassInEngine MyClass id=20 

感谢您的帮助。

回答

1

尝试更换这行:

mvn -Dclass=\"launch-in-engine $1 $2\" 

有了这个:

mvn "-Dclass=\"launch-in-engine $1 $2\"" 

究其原因,我认为这可能会解决你的问题是,你是(我认为),希望通过整个-Dclass为一个参数,但在该字符串内部存在未转义和未加引号的空格,因此shell实际上看到三个参数:

  • -Dclass=\"launch-in-engine
  • $1
  • $2\"

尝试增加周围的整个事情转义双引号,以便它被视为一个参数。

+0

谢谢弗雷德。这有帮助。 – Kaps

0

有2个问题

  1. 使用-x导致我打印调试信息相信,额外的“被插入
  2. 我是用来作为MVN -Dclass =运行MVN指令”推出发动机MyClass id = 20“。引号是将包含variuos指令的整个字符串传递给mvn插件。所以我认为在函数内部同样需要被复制。

但是,下面的脚本工作得很好。

#!/bin/bash -x 

function launchClassInEngine { 
mvn "-Dclass=launch-in-engine $1 $2" 
} 


launchClassInEngine MyClass id=20