diff --git a/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script b/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script index 2804e09e10..7b5abb8887 100755 --- a/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script +++ b/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script @@ -24,24 +24,26 @@ # Initialize variables that cannot be provided by a .conf file WORKING_DIR="$(pwd)" +# shellcheck disable=SC2153 [[ -n "$JARFILE" ]] && jarfile="$JARFILE" [[ -n "$APP_NAME" ]] && identity="$APP_NAME" # Follow symlinks to find the real jar and detect init.d script -cd $(dirname "$0") +cd "$(dirname "$0")" || exit [[ -z "$jarfile" ]] && jarfile=$(pwd)/$(basename "$0") while [[ -L "$jarfile" ]]; do - [[ "$jarfile" =~ "init.d" ]] && init_script=$(basename "$jarfile") + [[ "$jarfile" =~ init\.d ]] && init_script=$(basename "$jarfile") jarfile=$(readlink "$jarfile") - cd $(dirname "$jarfile") + cd "$(dirname "$jarfile")" || exit jarfile=$(pwd)/$(basename "$jarfile") done -jarfolder=$(dirname "$jarfile") -cd "$WORKING_DIR" +jarfolder="$(dirname "$jarfile")" +cd "$WORKING_DIR" || exit # Source any config file -configfile=$(basename "${jarfile%.*}.conf") -[[ -r ${jarfolder}/${configfile} ]] && source ${jarfolder}/${configfile} +configfile="$(basename "${jarfile%.*}.conf")" +# shellcheck source=/dev/null +[[ -r "${jarfolder}/${configfile}" ]] && source "${jarfolder}/${configfile}" # Initialize PID/LOG locations if they weren't provided by the config file [[ -z "$PID_FOLDER" ]] && PID_FOLDER="/var/run" @@ -66,9 +68,9 @@ fi # ANSI Colors -echoRed() { echo $'\e[0;31m'$1$'\e[0m'; } -echoGreen() { echo $'\e[0;32m'$1$'\e[0m'; } -echoYellow() { echo $'\e[0;33m'$1$'\e[0m'; } +echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; } +echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; } +echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; } # Utility functions checkPermissions() { @@ -77,7 +79,7 @@ checkPermissions() { } isRunning() { - ps -p $1 &> /dev/null + ps -p "$1" &> /dev/null } await_file() { @@ -108,12 +110,13 @@ pid_file="$PID_FOLDER/${identity}.pid" log_file="$LOG_FOLDER/$LOG_FILENAME" # Determine the user to run as if we are root +# shellcheck disable=SC2012 [[ $(id -u) == "0" ]] && run_user=$(ls -ld "$jarfile" | awk '{print $3}') # Find Java if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then javaexe="$JAVA_HOME/bin/java" -elif type -p java 2>&1> /dev/null; then +elif type -p java > /dev/null 2>&1; then javaexe=$(type -p java) elif [[ -x "/usr/bin/java" ]]; then javaexe="/usr/bin/java" @@ -123,15 +126,15 @@ else fi # Build actual command to execute -command="$javaexe -Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar $jarfile $RUN_ARGS $@" +command="$javaexe -Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS -jar $jarfile $RUN_ARGS $*" # Action functions start() { if [[ -f "$pid_file" ]]; then pid=$(cat "$pid_file") - isRunning $pid && { echoYellow "Already running [$pid]"; return 0; } + isRunning "$pid" && { echoYellow "Already running [$pid]"; return 0; } fi - do_start + do_start "$@" } do_start() { @@ -143,21 +146,21 @@ do_start() { chown "$run_user" "$PID_FOLDER" chown "$run_user" "$pid_file" chown "$run_user" "$log_file" - if [ {{useStartStopDaemon:true}} = true ] && which start-stop-daemon >/dev/null; then + if [ "${useStartStopDaemon:-true}" = true ] && which start-stop-daemon >/dev/null; then start-stop-daemon --start --quiet \ - --chuid $run_user \ - --name $identity \ - --make-pidfile --pidfile $pid_file \ + --chuid "$run_user" \ + --name "$identity" \ + --make-pidfile --pidfile "$pid_file" \ --background --no-close \ - --startas $javaexe \ + --startas "$javaexe" \ --chdir "$working_dir" \ -- \ - -Dsun.misc.URLClassPath.disableJarChecking=true $JAVA_OPTS \ - -jar $jarfile $RUN_ARGS "$@" \ - > $log_file 2>&1 - await_file $pid_file + -Dsun.misc.URLClassPath.disableJarChecking=true "${JAVA_OPTS[@]}" \ + -jar "$jarfile" "${RUN_ARGS[@]}" "$@" \ + > "$log_file" 2>&1 + await_file "$pid_file" else - su -s /bin/sh -c "$command &> \"$log_file\" & echo \$!" $run_user > "$pid_file" + su -s /bin/sh -c "$command > \"$log_file\" 2>&1 & echo \$!" "$run_user" > "$pid_file" fi pid=$(cat "$pid_file") else @@ -174,14 +177,14 @@ do_start() { stop() { [[ -f $pid_file ]] || { echoYellow "Not running (pidfile not found)"; return 0; } pid=$(cat "$pid_file") - isRunning $pid || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; } - do_stop $pid $pid_file + isRunning "$pid" || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; } + do_stop "$pid" "$pid_file" } do_stop() { - kill $1 &> /dev/null || { echoRed "Unable to kill process $1"; return 1; } - for i in $(seq 1 60); do - isRunning $1 || { echoGreen "Stopped [$1]"; rm -f $2; return 0; } + kill "$1" &> /dev/null || { echoRed "Unable to kill process $1"; return 1; } + for _ in $(seq 1 60); do + isRunning "$1" || { echoGreen "Stopped [$1]"; rm -f "$2"; return 0; } sleep 1 done echoRed "Unable to kill process $1"; @@ -196,25 +199,25 @@ force_reload() { [[ -f $pid_file ]] || { echoRed "Not running (pidfile not found)"; return 7; } pid=$(cat "$pid_file") rm -f "$pid_file" - isRunning $pid || { echoRed "Not running (process ${pid} not found)"; return 7; } - do_stop $pid $pid_file + isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 7; } + do_stop "$pid" "$pid_file" do_start } status() { - [[ -f $pid_file ]] || { echoRed "Not running"; return 3; } + [[ -f "$pid_file" ]] || { echoRed "Not running"; return 3; } pid=$(cat "$pid_file") - isRunning $pid || { echoRed "Not running (process ${pid} not found)"; return 1; } + isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 1; } echoGreen "Running [$pid]" return 0 } run() { - pushd $(dirname "$jarfile") > /dev/null - exec $command + pushd "$(dirname "$jarfile")" > /dev/null + $command result=$? popd - return $result + return "$result" } # Call the appropriate action function