mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-13 03:51:10 +00:00
48 lines
1.6 KiB
Bash
Executable File
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
|