LWJGL Shader Tutorials / launch

#!/bin/bash

die () {
    echo -e "$*" >&2
    exit 1
}

mvn=$(which mvn)

[[ -z $mvn ]] && die "\n\n  Maven not found.  Please download it from http://maven.apache.org/download.html\n\n"

launch () {
    class=$1
    MAVEN_OPTS='-Djava.library.path=target/natives' mvn compile exec:java -Dexec.mainClass=$class
}

get_targets () {
    expr=$1
    grep -rl 'public static void main' src/main/java \
        | sed 's/\//./g; s/\.java$//; s/^src\.main.java\.//' \
        | grep $expr
}

expr=${1:-.}

declare -a targets=($(get_targets $expr))
len=${#targets[@]}
if [[ $len = 0 ]]; then
    echo "No targets found for $expr"
elif [[ $len -gt 1 ]]; then
    echo -e "Found $len matching targets.  Choose one:\n"
    read -p "$(
    i=0
    for t in ${targets[@]}
    do
        printf "%3d) %s\n" $((++i)) $t
    done
    if [[ $expr = . ]]; then
        echo ""
        echo "Hint: you can narrow down this list by passing part of the name"
        echo "      as an argument next time you launch."
        echo ""
        echo "Example:  $0 arcsyn"
        echo ""
    fi
    echo -ne "\nSelect one: "
    )" selection
    selected="${targets[$((selection-1))]}"

    [[ -z "$selected" ]] && die "No target selected."
    launch $selected
    exit 1
else
    launch ${targets[0]}
fi
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.