diff --git a/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm-Service.sh index dda3051d6..6a6f2d233 100755 --- a/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm-Service.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm.exe" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm.sh b/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm.sh index e60cbfe51..044576853 100755 --- a/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm.sh +++ b/ArchiSteamFarm/overlay/generic-netf/ArchiSteamFarm.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm.exe" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/generic/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/generic/ArchiSteamFarm-Service.sh index 75ebf7890..a9d9bd48d 100755 --- a/ArchiSteamFarm/overlay/generic/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/generic/ArchiSteamFarm-Service.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm.dll" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/generic/ArchiSteamFarm.sh b/ArchiSteamFarm/overlay/generic/ArchiSteamFarm.sh index d8cc73dac..09d88607e 100755 --- a/ArchiSteamFarm/overlay/generic/ArchiSteamFarm.sh +++ b/ArchiSteamFarm/overlay/generic/ArchiSteamFarm.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm.dll" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/linux-arm/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/linux-arm/ArchiSteamFarm-Service.sh index 307365d65..cbbc09899 100755 --- a/ArchiSteamFarm/overlay/linux-arm/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/linux-arm/ArchiSteamFarm-Service.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/linux-arm64/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/linux-arm64/ArchiSteamFarm-Service.sh index 307365d65..cbbc09899 100755 --- a/ArchiSteamFarm/overlay/linux-arm64/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/linux-arm64/ArchiSteamFarm-Service.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/linux-x64/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/linux-x64/ArchiSteamFarm-Service.sh index 307365d65..cbbc09899 100755 --- a/ArchiSteamFarm/overlay/linux-x64/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/linux-x64/ArchiSteamFarm-Service.sh @@ -2,12 +2,16 @@ set -eu CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" -cd "$(dirname "$(readlink -f "$0")")" - -SCRIPT_DIR="$(pwd)" -SCRIPT_PATH="${SCRIPT_DIR}/${0}" +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" BINARY="${SCRIPT_DIR}/ArchiSteamFarm" if [ ! -f "$BINARY" ]; then @@ -15,6 +19,8 @@ if [ ! -f "$BINARY" ]; then exit 1 fi +cd "$SCRIPT_DIR" + BINARY_ARGS="" PATH_NEXT=0 diff --git a/ArchiSteamFarm/overlay/osx-x64/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/osx-x64/ArchiSteamFarm-Service.sh new file mode 100644 index 000000000..cbbc09899 --- /dev/null +++ b/ArchiSteamFarm/overlay/osx-x64/ArchiSteamFarm-Service.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env sh +set -eu + +CONFIG_PATH="config/ASF.json" +OS_TYPE="$(uname -s)" + +case "$OS_TYPE" in + "Darwin") SCRIPT_PATH="$(readlink "$0")" ;; + "FreeBSD") SCRIPT_PATH="$(readlink -f "$0")" ;; + "Linux") SCRIPT_PATH="$(readlink -f "$0")" ;; + *) echo "ERROR: Unknown OS type: ${OS_TYPE}. If you believe that our script should work on your machine, please let us know."; exit 1 +esac + +SCRIPT_DIR="$(dirname "$SCRIPT_PATH")" +BINARY="${SCRIPT_DIR}/ArchiSteamFarm" + +if [ ! -f "$BINARY" ]; then + echo "ERROR: $BINARY could not be found!" + exit 1 +fi + +cd "$SCRIPT_DIR" + +BINARY_ARGS="" +PATH_NEXT=0 + +PARSE_ARG() { + BINARY_ARGS="$BINARY_ARGS $1" + + case "$1" in + --path) PATH_NEXT=1 ;; + --path=*) + if [ "$PATH_NEXT" -eq 1 ]; then + PATH_NEXT=0 + cd "$1" + else + cd "$(echo "$1" | cut -d '=' -f 2-)" + fi + ;; + *) + if [ "$PATH_NEXT" -eq 1 ]; then + PATH_NEXT=0 + cd "$1" + fi + esac +} + +if [ -n "${ASF_PATH-}" ]; then + cd "$ASF_PATH" +fi + +if [ -n "${ASF_ARGS-}" ]; then + for ARG in $ASF_ARGS; do + if [ -n "$ARG" ]; then + PARSE_ARG "$ARG" + fi + done +fi + +for ARG in "$@"; do + if [ -n "$ARG" ]; then + PARSE_ARG "$ARG" + fi +done + +CONFIG_PATH="$(pwd)/${CONFIG_PATH}" + +# Kill underlying ASF process on shell process exit +trap "trap - TERM && kill -- -$$" INT TERM + +while :; do + if [ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?true' "$CONFIG_PATH"; then + # We're running ASF in headless mode so we don't need STDIN + "$BINARY" $BINARY_ARGS & # Start ASF in the background, trap will work properly due to non-blocking call + wait $! # This will forward dotnet error code, set -e will abort the script if it's non-zero + else + # We're running ASF in non-headless mode, so we need STDIN to be operative + "$BINARY" $BINARY_ARGS # Start ASF in the foreground, trap sadly won't work until process exit + fi + + chmod +x "$SCRIPT_PATH" # If ASF exited by itself, we need to ensure that our script is still set to +x after auto-update + sleep 1 +done