diff --git a/Makefile b/Makefile index 35aad9e..43b7d86 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ PREFIX ?= /usr all: - @echo Run \'make install\' to install mca + @echo Run \'make install\' to install MCA install: @install -m 0755 mca.sh -D $(DESTDIR)$(PREFIX)/bin/mca diff --git a/mca.sh b/mca.sh index 4cb06ba..85c3bea 100755 --- a/mca.sh +++ b/mca.sh @@ -4,24 +4,20 @@ set -e EXEC_NAME="$(basename -- "$0")" -USAGE="Usage: $EXEC_NAME [OPTION]... [MCA_NAME|MCA_JAR|MCA_DIR] [INPUT]..." -VERSION="mca 1.0.0" - -OPTION="$(getopt -n "$EXEC_NAME" -s sh -o hvfdxrs -l help -l version -- "$@")" -eval set -- "$OPTION" +options="$(getopt -n "$EXEC_NAME" -s sh -o hvfdxr -l help -l version -- "$@")" +eval set -- "$options" SCREEN_OPTS= REATTACH_ONLY=0 -SKIP_CONFIGURE=0 while :; do case "$1" in -h|--help) - echo "$USAGE" + echo "Usage: $EXEC_NAME [-fdxr] [MCA_NAME|MCA_JAR|MCA_DIR] [--] [INPUT]…" exit ;; -v|--version) - echo "$VERSION" + echo "MCA 1.0.0" exit ;; -f) @@ -36,9 +32,6 @@ while :; do -r) REATTACH_ONLY=1 ;; - -s) - SKIP_CONFIGURE=1 - ;; --) shift break @@ -51,8 +44,7 @@ MCA_NAME=$1 if [ -z "$MCA_NAME" ]; then MCA_DIR="$PWD" MCA_NAME="$(basename -- "$MCA_DIR")" -elif echo "$MCA_NAME" | grep -qE '^\.{,2}/' && \ - MCA_NAME="$(readlink -f -- "$MCA_NAME")"; then +elif echo "$MCA_NAME" | grep -qE '^\.{,2}/' && MCA_NAME="$(readlink -f -- "$MCA_NAME")"; then if [ -d "$MCA_NAME" ]; then MCA_DIR="$MCA_NAME" MCA_NAME="$(basename -- "$MCA_DIR")" @@ -64,65 +56,45 @@ else MCA_DIR="$HOME/mca/$MCA_NAME" fi -if ! command -v screen > /dev/null; then - echo "$EXEC_NAME: screen not found" >&2 - exit 2 -fi +command -v screen > /dev/null || { echo "$EXEC_NAME: screen not found" >&2; exit 2; } if [ -n "$2" ]; then shift INPUT="$(echo "$*" | sed 's/"/\\\0/g')" - if screen -S "$MCA_NAME" -X eval "stuff \"$INPUT\"\\015" > /dev/null; then - exit 0 - else - echo "$EXEC_NAME: $MCA_NAME: no such screen found" >&2 + screen -S "$MCA_NAME" -X eval "stuff \"$INPUT\"\\015" > /dev/null || { + echo "$EXEC_NAME: no screen found" >&2 exit 2 - fi + } + exit fi MCA_SCREENRC_FILE="/etc/mca/screenrc" -if [ ! -r "$MCA_SCREENRC_FILE" ]; then - echo "$EXEC_NAME: can't read $MCA_SCREENRC_FILE" >&2 - exit 2 -fi +[ -r "$MCA_SCREENRC_FILE" ] || { echo "$EXEC_NAME: can't read $MCA_SCREENRC_FILE" >&2; exit 2; } -if screen -c "$MCA_SCREENRC_FILE" "-$SCREEN_OPTS"rS \ - "$MCA_NAME" > /dev/null 2>&1; then - exit 0 +if screen -c "$MCA_SCREENRC_FILE" "-$SCREEN_OPTS"rS "$MCA_NAME" > /dev/null 2>&1; then + exit elif screen -S "$MCA_NAME" -X select . > /dev/null 2>&1; then echo "$EXEC_NAME: this screen has already been attached to someone" >&2 exit 2 fi -if [ "$REATTACH_ONLY" -eq 1 ]; then - echo "$EXEC_NAME: $MCA_NAME: no such screen found" >&2 - exit 2 -fi +[ "$REATTACH_ONLY" -eq 1 ] && { echo "$EXEC_NAME: $MCA_NAME: no such a screen was found" >&2; exit 2; } -if [ ! -d "$MCA_DIR" ]; then - echo "$EXEC_NAME: $MCA_DIR: such directory not found" >&2 - exit 2 -fi +[ -d "$MCA_DIR" ] || { echo "$EXEC_NAME: $MCA_DIR: not found" >&2; exit 2; } cd "$MCA_DIR" MCA_RC_FILE="$MCA_DIR/.mcarc" -# this file is taken from a dynamic variable, so we cannot specify an explicit -# path to the file. +# this file is taken from a dynamic variable, so we cannot specify an explicit path to the file # shellcheck disable=SC1090 -# `--` is supported in dash. +# `--` is supported in dash # shellcheck disable=SC2240 -if [ -e "$MCA_RC_FILE" ]; then - set -a - . -- "$MCA_RC_FILE" - set +a -fi +[ -e "$MCA_RC_FILE" ] && . -- "$MCA_RC_FILE" if [ -z "$PLATFORM" ]; then if [ -z "$MCA_JAR" ]; then - MCA_JAR="$(find "$MCA_DIR" -maxdepth 1 \ - -type f -name \*.jar | head -1)" + MCA_JAR="$(find "$MCA_DIR" -maxdepth 1 -type f -name \*.jar | head -1)" [ -z "$MCA_JAR" ] && { echo "$EXEC_NAME: no jar found in $MCA_DIR" >&2 exit 2 @@ -131,8 +103,7 @@ if [ -z "$PLATFORM" ]; then if [ -e "$MCA_JAR" ]; then PLATFORM="$(basename -- "$MCA_JAR")" - PLATFORM="$(echo "$PLATFORM" | tr '[:upper:]' '[:lower:]' | \ - grep -oE '[a-z]+' | head -1)" + PLATFORM="$(echo "$PLATFORM" | tr '[:upper:]' '[:lower:]' | grep -oE '[a-z]+' | head -1)" else echo "$EXEC_NAME: $MCA_JAR: no such file" >&2 exit 2 @@ -186,41 +157,27 @@ case "$PLATFORM" in custom) ;; *) - echo "$EXEC_NAME: invalid platform: $PLATFORM. Valid: bungee, \ - waterfall, velocity, minecraft, bukkit, craftbukkit, spigot, \ - paper, custom" >&2 + echo "$EXEC_NAME: invalid platform: $PLATFORM. Valid: \ +bungee, waterfall, velocity, minecraft, bukkit, craftbukkit, spigot, paper, custom" >&2 exit 2 ;; esac -if [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME/bin" ]; then - PATH="$JAVA_HOME/bin:$PATH" -fi +[ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME/bin" ] && PATH="$JAVA_HOME/bin:$PATH" -if ! command -v java > /dev/null; then +java -version > /dev/null 2>&1 || { echo "$EXEC_NAME: unable to get Java version (is Java installed?)" >&2 exit 2 -fi +} [ -n "$MAX_MEMORY" ] && JVM_FLAGS="-Xmx$MAX_MEMORY $JVM_FLAGS" [ -n "$MIN_MEMORY" ] && JVM_FLAGS="-Xms$MIN_MEMORY $JVM_FLAGS" MCA_CMD="$(which java) -server $JVM_FLAGS -jar $MCA_JAR" -if [ "$SKIP_CONFIGURE" -eq 0 ]; then - ENV_LIST="$(cut -d= -f1 < ./.mcarc | sed 's/^/$/g'))" - FILE_LIST="$(find . -name '*.in' -type f)" - - echo "$FILE_LIST" | while read -r line; do - envsubst "$ENV_LIST" < "$line" > "${line%*.in}" - done -fi - -# papermc prints uncolored text if the COLORTERM variable is set to -# `truecolor`. +# papermc prints uncolored text if the COLORTERM variable is set to `truecolor` export COLORTERM= -# we don't quote $MCA_CMD because screen treats arguments after the second one -# as a command. +# we don't quote $MCA_CMD because screen treats arguments after the second one as a command # shellcheck disable=SC2086 exec screen -c "$MCA_SCREENRC_FILE" "-$SCREEN_OPTS"S "$MCA_NAME" -- $MCA_CMD