mvn in bash script if statement

前端 未结 3 1758
北荒
北荒 2021-02-15 18:06

I want to run the command mvn clean in a bash script. But I want to put it in an if statement. If the clean does not run properly I would like to exit out of the bash script wit

相关标签:
3条回答
  • 2021-02-15 18:21

    No parentheses needed for checking the exit status:

    if mvn clean ; then
       echo ok
    else
       echo Something went wrong.
       exit 1
    fi
    
    0 讨论(0)
  • 2021-02-15 18:24

    Here's what you want:

    mvn clean
    if [ "$?" -ne 0 ]; then
        echo "Maven Clean Unsuccessful!"
        exit 1
    fi
    

    Explanation:

    • $? is a special shell variable that contains the exit code (whether it terminated successfully, or not) of the most immediate recently executed command.
    • -ne is an option to the test builtin [. It stands for "not equal". So here we are testing if the exit code from mvn clean is not equal to zero.
    • echo "Maven Clean Unsucccessful!" - If this is the case, then we output some indicative message, and exit the script itself with an errant exit code.

    When you do $(mvn clean), that instead spawns a new subshell to run mvn clean, then simply dumps everything that was output to stdout in that subshell from running mvn clean to where $(...) was used in the parent shell.


    Alternatively, you can do:

    mvn clean || { echo "Maven Clean Unsuccessful"; exit 1; }
    

    Which is just shorthand syntactic sugar for doing the same thing.

    0 讨论(0)
  • 2021-02-15 18:29

    I prefer to use a variable to capture the return code. Improves readability and allows running additional commands without fear of clobbering return code value:

    mvn clean
    
    MVN_RTN=$?
    if [ "${MVN_RTN}" -ne 0 ]; then
       echo "Maven returned failure code ${MVN_RTN}"
       exit 1
    fi
    
    0 讨论(0)
提交回复
热议问题