Refactor code style and add -s option that processing *.in files
This commit is contained in:
parent
674d14bffd
commit
b58965dc23
1 changed files with 70 additions and 27 deletions
97
mca.sh
97
mca.sh
|
|
@ -4,20 +4,24 @@ set -e
|
|||
|
||||
EXEC_NAME="$(basename -- "$0")"
|
||||
|
||||
options="$(getopt -n "$EXEC_NAME" -s sh -o hvfdxr -l help -l version -- "$@")"
|
||||
eval set -- "$options"
|
||||
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"
|
||||
|
||||
SCREEN_OPTS=
|
||||
REATTACH_ONLY=0
|
||||
SKIP_CONFIGURE=0
|
||||
|
||||
while :; do
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
echo "Usage: $EXEC_NAME [-fdxr] [MCA_NAME|MCA_JAR|MCA_DIR] [--] [INPUT]…"
|
||||
echo "$USAGE"
|
||||
exit
|
||||
;;
|
||||
-v|--version)
|
||||
echo "MCA 1.0.0"
|
||||
echo "$VERSION"
|
||||
exit
|
||||
;;
|
||||
-f)
|
||||
|
|
@ -32,6 +36,9 @@ while :; do
|
|||
-r)
|
||||
REATTACH_ONLY=1
|
||||
;;
|
||||
-s)
|
||||
SKIP_CONFIGURE=1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
|
|
@ -44,7 +51,8 @@ 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")"
|
||||
|
|
@ -56,45 +64,65 @@ else
|
|||
MCA_DIR="$HOME/mca/$MCA_NAME"
|
||||
fi
|
||||
|
||||
command -v screen > /dev/null || { echo "$EXEC_NAME: screen not found" >&2; exit 2; }
|
||||
if ! command -v screen > /dev/null; then
|
||||
echo "$EXEC_NAME: screen not found" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ -n "$2" ]; then
|
||||
shift
|
||||
INPUT="$(echo "$*" | sed 's/"/\\\0/g')"
|
||||
screen -S "$MCA_NAME" -X eval "stuff \"$INPUT\"\\015" > /dev/null || {
|
||||
echo "$EXEC_NAME: no screen found" >&2
|
||||
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
|
||||
exit 2
|
||||
}
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
|
||||
MCA_SCREENRC_FILE="/etc/mca/screenrc"
|
||||
[ -r "$MCA_SCREENRC_FILE" ] || { echo "$EXEC_NAME: can't read $MCA_SCREENRC_FILE" >&2; exit 2; }
|
||||
if [ ! -r "$MCA_SCREENRC_FILE" ]; then
|
||||
echo "$EXEC_NAME: can't read $MCA_SCREENRC_FILE" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if screen -c "$MCA_SCREENRC_FILE" "-$SCREEN_OPTS"rS "$MCA_NAME" > /dev/null 2>&1; then
|
||||
exit
|
||||
if screen -c "$MCA_SCREENRC_FILE" "-$SCREEN_OPTS"rS \
|
||||
"$MCA_NAME" > /dev/null 2>&1; then
|
||||
exit 0
|
||||
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
|
||||
|
||||
[ "$REATTACH_ONLY" -eq 1 ] && { echo "$EXEC_NAME: $MCA_NAME: no such a screen was found" >&2; exit 2; }
|
||||
if [ "$REATTACH_ONLY" -eq 1 ]; then
|
||||
echo "$EXEC_NAME: $MCA_NAME: no such screen found" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
[ -d "$MCA_DIR" ] || { echo "$EXEC_NAME: $MCA_DIR: not found" >&2; exit 2; }
|
||||
if [ ! -d "$MCA_DIR" ]; then
|
||||
echo "$EXEC_NAME: $MCA_DIR: such directory not found" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
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
|
||||
[ -e "$MCA_RC_FILE" ] && . -- "$MCA_RC_FILE"
|
||||
if [ -e "$MCA_RC_FILE" ]; then
|
||||
set -a
|
||||
. -- "$MCA_RC_FILE"
|
||||
set +a
|
||||
fi
|
||||
|
||||
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
|
||||
|
|
@ -103,7 +131,8 @@ 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
|
||||
|
|
@ -157,27 +186,41 @@ 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
|
||||
|
||||
[ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME/bin" ] && PATH="$JAVA_HOME/bin:$PATH"
|
||||
if [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME/bin" ]; then
|
||||
PATH="$JAVA_HOME/bin:$PATH"
|
||||
fi
|
||||
|
||||
java -version > /dev/null 2>&1 || {
|
||||
if ! command -v java > /dev/null; then
|
||||
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"
|
||||
|
||||
# papermc prints uncolored text if the COLORTERM variable is set to `truecolor`
|
||||
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`.
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue