#!/bin/sh # Exit status codes: # 0 = Version reported correctly # 1 = Error TWS_TIMEOUT="15" if ! test -e "$1"; then echo "Usage: $0 " 1>&2 echo "Example: $0 $HOME/.tws_scripts/tws-latest-standalone-linux-x64.sh" 1>&2 exit 1 fi ARG1="$(readlink -v -f "$1")" || exit 1 TDIR="$(mktemp -d -t twsdir.XXXX)" || exit 1 trap "rm -rf ${TDIR}" exit cd "${TDIR}" || exit 1 # Clean up installation directories if required and install new version rm -rf $HOME/.install4j $HOME/.i4j_jres $HOME/tws chmod +x ${ARG1} ${ARG1} -q &> /dev/null TWS_HOME="${TDIR}/twshome" mkdir "${TWS_HOME}" || exit 1 LOG="${TWS_HOME}/launcher.log" TWS_CP=`find ${HOME}/tws/jars -type f -name \*.jar -printf '%p:'` /usr/sbin/xvfb-run -n 99 /usr/lib/jvm/java-8-openjdk/jre/bin/java -cp "${TWS_CP}" jclient.LoginFrame "${TWS_HOME}" & disown TWS_PID="$!" # Wait for TWS JVM to start writing to $LOG while [ ! -f $LOG ]; do inotifywait -q -q -t 10 -e create --format '%f' $TWS_HOME if [ $? -eq 2 ] && [ ! -f $LOG ]; then echo "Error: $LOG not found" exit 1 fi done # Wait for $LOG to contain version ("Build") line for count in {0..10}; do grep -q ' - Build' $LOG if [ $? -eq 0 ]; then break fi sleep 1 done # Kill process now that version line or timeout was reached /usr/bin/kill --verbose --timeout 1000 TERM --timeout 1000 KILL --signal INT $TWS_PID &>/dev/null # Clean up ready for next run rm -rf $HOME/.install4j $HOME/.i4j_jres $HOME/tws # Extract version line from log now the JVM has exited VERSION_LINE=$(grep -m1 ' - Build' $LOG) if [ $? -eq 0 ]; then echo "${VERSION_LINE}" |sed -e 's/.*Build //1' -e 's/,.*//1' exit 0 fi echo "could not grep version string; final log appears below" 1>&2 cat $LOG 1>&2 exit 1