2014-09-22 48 views
-1

有腳本運行Maven與參數有空格

while true; 
     do 
     case "$1" in 
     -l | --login) LOGIN=$2; shift 2 ;; 
     --) shift; break ;; 
     *) break ;; 
     esac 
    done 
    mvn clean install -Dlogin=\"$LOGIN\" 

運行該腳本:run_mvn.sh --login 「聯繫管理員」 Maven的說:

[email protected]:~/App$ ./run.sh --login "Admin Admin" 
[INFO] Scanning for projects... 
[INFO] Reactor build order: 
[INFO] Application 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Invalid task 'Admin"': you must specify a valid lifecycle phase, or a goal in the format plugin:goal or pluginGroupId:pluginArtifactId:pluginVersion:goal 
[INFO] ------------------------------------------------------------------------ 
[INFO] For more information, run Maven with the -e switch 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1 second 
[INFO] Finished at: Mon Sep 22 18:11:45 EEST 2014 
[INFO] Final Memory: 4M/119M 
[INFO] ------------------------------------------------------------------------ 

只有在運行mvn clean install -Dlogin =「Admin Admin」時,構建纔會成功。 謝謝!

回答

0

簡單地引用參數擴展

mvn clean install -Dlogin="$LOGIN" 

mvn會看到它的一個參數爲-Dlogin=Admin Admin(包括空格),並將處理解析這個詞本身。

您編寫代碼的方式mvn正在接收兩個單獨的參數-Dlogin="AdminAdmin"。逃過的引號並不妨礙$LOGIN的擴展,使其經歷分詞,並且它們本身作爲擴展的一部分被傳遞。

0

是的這個解決方案的工作原理。 如果我想要這樣更改腳本,該怎麼辦:

while true;. 
     do 
     case "$1" in 
     -l | --login) LOGIN=$2; shift 2 ;; 
     --) shift; break ;; 
     *) break ;; 
     esac 
    done.. 
    COMMAND="mvn clean install" 
    if [ -n "$LOGIN" ] 
    then 
     COMMAND=$COMMAND" -Dlogin=\"$LOGIN\"" 
    fi 
    echo $COMMAND 
    $COMMAND