Cómo verificar el estado de salida de una aplicación después de usar 'abrir' en shell

4

He mirado por todo esto y no estoy del todo seguro de cómo hacerlo.

Quiero usar un script de bash para abrir una aplicación usando 'abrir' y luego verificar el estado de salida de la aplicación después de que haya finalizado.

Por lo que yo sé, open -W saldrá con el estado 0 siempre que la aplicación se haya abierto, no estoy interesado en esta salida, estoy interesado en la salida de aplicaciones.

Actualmente tengo el siguiente 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 

Lo que abre la aplicación y luego espera, si el estado de salida es 0, volverá a abrir la aplicación nuevamente después del cierre. Sin embargo, esto está pensado, lo que quiero es poder detener este script si la aplicación en sí no salía de 0 en lugar de que el comando 'abrir' se cerrara con éxito.

En resumen:

Abre MyApp.app

si MyApp.app (no abierto) se bloquea, detenga la secuencia de comandos; de lo contrario, vuelva a abrir MyApp.app

    
pregunta Ben Crazed Up Euden 03.09.2014 - 16:01

1 respuesta

5

Mi respuesta es: no puedes con open incluso con el indicador -W . En su lugar, use un script de shell repeat_run que podría construirse de la siguiente manera:

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
    
respondido por el daniel Azuelos 03.09.2014 - 20:05

Lea otras preguntas en las etiquetas