Files
DroidDeck/tools/linuxfs/overlay/usr/local/bin/droiddeck-script-run
T
2026-10-13 21:27:42 -04:00

48 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
set -u
dir=${1:?usage: droiddeck-script-run <added app directory> [args...]}
shift
entry=$(cat "$dir/entry" 2>/dev/null) || { echo "droiddeck-script-run: $dir has no entry" >&2; exit 127; }
cd -P "$dir/files" 2>/dev/null || { echo "droiddeck-script-run: $dir/files is missing; add the script again" >&2; exit 127; }
folder=$PWD
first=
IFS= read -r first < "$entry"
first=${first%$'\r'}
interp=(/bin/bash)
case $first in '#!'*) read -r -a interp <<< "${first#'#!'}" ;; $'\x7f'ELF*) interp=() ;; esac
fex=$(cat "$dir/fex" 2>/dev/null)
case $fex in on|off) ;; *) fex=auto ;; esac
run=("${interp[@]}" "./$entry")
if [ -x /usr/local/bin/droiddeck-fex ]; then
run=(/usr/local/bin/droiddeck-fex run --mode "$fex" --for "$folder" -- "${interp[@]}" "./$entry")
fi
echo "== script $entry in $folder (${interp[*]:-a program}, FEX $fex)"
case ${DBUS_SESSION_BUS_ADDRESS:-} in
unix:*) "${run[@]}" "$@" ;;
*) unset DBUS_SESSION_BUS_ADDRESS
if command -v dbus-run-session >/dev/null 2>&1; then
dbus-run-session -- "${run[@]}" "$@"
else
"${run[@]}" "$@"
fi ;;
esac
rc=$?
running() {
local p exe arg cwd
for p in /proc/[0-9]*; do
exe=$(readlink "$p/exe" 2>/dev/null) || continue
case $exe in "$folder"/*) return 0 ;; esac
case $exe in
*/FEX|*/FEXInterpreter)
arg=$(tr '\0' '\n' < "$p/cmdline" 2>/dev/null | sed -n 2p)
cwd=$(readlink "$p/cwd" 2>/dev/null)
case $arg in "$folder"/*) return 0 ;; esac
case $cwd in "$folder"|"$folder"/*) return 0 ;; esac
;;
esac
done
return 1
}
while running; do sleep 2; done
exit $rc