Sem o comando eval não é executado corretamente

0

apenas algo que eu não consigo descobrir. Begginner bash scripter aqui

Eu escrevi um script para aceitar parâmetros de linha de comando que depois são passados para o maven

Aqui está a versão de trabalho do script:

#!/bin/bash -x

# deploys the application and runs acceptance tests against it
if [ -n "$1" ]; then
#Executes acceptance tests containing the word $1 - eg: ats paymill, will only run test scenarios with the paymill word
    echo mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\"
    eval $(echo mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\")
else
    mvn clean verify -Pacceptance.test;
fi

Mas eu esperaria que isso funcionasse:

#!/bin/bash -x

# deploys the application and runs acceptance tests against it
if [ -n "$1" ]; then
#Executes acceptance tests containing the word $1 - eg: ats paymill, will only run test scenarios with the paymill word
    echo mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\"
    mvn clean verify -Pacceptance.test -Dcucumber.options=\"-n $1\"
else
    mvn clean verify -Pacceptance.test;
fi

Mas a execução do último script (com o sinalizador -x) me fornece a seguinte saída

+ '[' -n paymill ']'
+ echo mvn clean verify -Pacceptance.test '-Dcucumber.options="-n' 'paymill"'
mvn clean verify -Pacceptance.test -Dcucumber.options="-n paymill"
+ mvn clean verify -Pacceptance.test '-Dcucumber.options="-n' 'paymill"'

Eu posso ver que o resultado do comando echo é o que eu espero, mas se eu tentar executá-lo em vez de ecoá-lo, não funciona.

De onde vêm essas citações em torno das -Ducucumber.options e entre as palavras -n e paymill?

Obrigado por qualquer ajuda, só não consigo descobrir isso

    
por Pedro Garcia Mota 03.12.2014 / 12:09

1 resposta

1

O espaço após -n não é citado nem invertido, então o bash executa a divisão de palavras nele. Para evitar isso, cite ou inverta isso. Depois de fazer isso, você pode remover as aspas duplas, pois o parâmetro inteiro é uma palavra agora:

mvn clean verify -Pacceptance.test -Dcucumber.options=-n\ $1
# or
mvn clean verify -Pacceptance.test -Dcucumber.options=-n' '$1

Se o argumento puder conter espaços em branco, você também deve considerar a possibilidade de citá-lo em dobro.

mvn clean verify -Pacceptance.test -Dcucumber.options="-n $1"
    
por 03.12.2014 / 12:23