Come verificare lo stato di uscita di un'applicazione dopo aver usato 'apri' nella shell

4

Ho cercato tutto questo e non sono del tutto sicuro di come farlo.

Voglio usare uno script bash per aprire un'applicazione usando 'open' e quindi controllare lo stato di uscita dell'applicazione dopo che è terminata.

Per quanto ne so, open -W uscirà con lo stato 0 finché l'applicazione è aperta, non sono interessato a questa uscita, sono interessato all'uscita delle app.

Attualmente ho il seguente script:

trap "echo manual abort; exit 1"  1 2 3 15; 
while open -W /path/to/MyApp.app
    echo "all is well"
done

exit 0 

Che apre l'app e quindi attende, se lo stato di uscita è 0, riaprirà nuovamente l'app dopo la chiusura. Tuttavia, ciò che voglio è essere in grado di interrompere questo script se l'app stessa non ha terminato 0 anziché il comando 'apri' con esito positivo.

Quindi, in breve:

Apri MyApp.app

se MyApp.app (non aperto) si arresta in modo anomalo, ferma lo script, altrimenti riapri MyApp.app

    
posta Ben Crazed Up Euden 03.09.2014 - 16:01
fonte

1 risposta

5

La mia risposta è: non puoi con open anche con il flag -W . Piuttosto usa uno script di shell repeat_run che potrebbe essere costruito come segue:

cat >repeat_run.sh <<'__eof__'
#!/bin/sh
app_name=$1
bin_name='defaults read /Applications/${app_name}.app/Contents/Info.plist CFBundleExecutable 2>/dev/null'
if [ "${bin_name}" = "" ] ; then
    echo "${app_name} not found" >&2
    exit 2
fi
bin_path=/Applications/${app_name}.app/Contents/MacOS/${bin_name}
trap "echo manual abort ; exit 1"  1 2 3 15
while : ; do
    ${bin_path}
    rc=$?
    case $rc in
        0)      echo "$1 terminated correctly" ;;
        *)      exit ${rc} ;;
    esac
done
__eof__
make repeat_run
./repeat_run Pages
    
risposta data 03.09.2014 - 20:05
fonte

Leggi altre domande sui tag