2017-02-08 49 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