2014-09-22 2 views
-1

Есть скриптRun 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 "Admin Admin" 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="Admin и Admin". Сбежавшие кавычки не помешали распространению $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 
Смежные вопросы