diff --git a/.templates/ha_entrypoint.sh b/.templates/ha_entrypoint.sh index 4c99da034..c3980e0e5 100755 --- a/.templates/ha_entrypoint.sh +++ b/.templates/ha_entrypoint.sh @@ -1,12 +1,16 @@ #!/command/with-contenv bashio # shellcheck shell=bash -echo "Starting..." +set -e # Exit immediately if a command exits with a non-zero status + # Detect if this is PID1 (main container process) — do this once at the start PID1=false if [ "$$" -eq 1 ]; then PID1=true + echo "Starting as entrypoint" +else + echo "Starting custom scripts" fi ###################### @@ -21,27 +25,33 @@ fi candidate_shebangs+=( "/usr/bin/env bashio" "/usr/bin/bashio" - "/usr/bin/bash" - "/usr/bin/sh" - "/bin/bash" - "/bin/sh" ) -# Find the first valid shebang interpreter in candidate list +# Find the first valid shebang interpreter in candidate list by probing bashio::addon.version shebang="" +tmp="$(mktemp)" +trap 'rm -f "$tmp"' EXIT + for candidate in "${candidate_shebangs[@]}"; do - command_path="${candidate%% *}" - # Test if command exists and can actually execute a shell command (for shells) - if [ -x "$command_path" ]; then - # Try as both 'sh -c' and 'bashio echo' style - if "$command_path" -c 'echo yes' >/dev/null 2>&1 || "$command_path" echo "yes" >/dev/null 2>&1; then - shebang="$candidate" - break - fi + echo "Trying $candidate" + # Build a tiny probe script that prints the addon version + printf '#!%s\n' "$candidate" >"$tmp" + cat >>"$tmp" <<'EOF' +out="$(bashio::addon.version 2>/dev/null || true)" +[ -n "$out" ] && printf '%s\n' "$out" +EOF + chmod +x "$tmp" + + # Run the probe and check for at least one digit in the output + out="$(exec "$tmp" 2>/dev/null || true)" + if printf '%s' "$out" | grep -qE '[0-9]'; then + shebang="$candidate" + break fi done + if [ -z "$shebang" ]; then - echo "ERROR: No valid shebang found!" + echo "ERROR: No valid shebang found!" >&2 exit 1 fi