4 votos

Cómo comprobar el estado de salida de una aplicación después de usar "abrir" en la concha

He mirado por todas partes para este y no estoy del todo seguro de cómo hacer esto.

Quiero usar un script de bash para abrir una aplicación que utiliza "abrir" y, a continuación, comprobar el estado de salida de la aplicación después de que ha terminado.

Hasta donde yo soy consciente, abierto W de salida con estado 0 tanto tiempo como el que hizo la aplicación abierta, yo no estoy interesado en esta salida, estoy interesado en las aplicaciones de la salida.

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 

La que se abre la app y, a continuación, espera, si el estado de salida es 0 va a volver a abrir la aplicación de nuevo después del cierre. Esta es la intención, sin embargo, lo que yo quiero es ser capaz de detener este script si la aplicación en sí no salida 0 en lugar de el comando "abrir" con éxito a salir.

Así que, en resumen:

Abierto MyApp.aplicación

si MyApp.aplicación (no se abre) se bloquea, detener el script, de lo contrario, vuelva a abrir MyApp.aplicación

5voto

Rich Puntos 2429

Mi respuesta es: no se puede con open incluso con la -Wbandera. En lugar de utilizar una secuencia de comandos de shell repeat_run que podría ser construido 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

-1voto

Goldorak84 Puntos 116

La trampa de la señal no es necesario. Usted puede usar instrucciones condicionales:

#! /bin/bash

APP="/Path/to/application.app"      #Set variable APP to the application path

open "$APP"                      #Open App. Don't set the -W parameter.

#If successful:
if [ "$?" = "0" ]; then              #If the last command executes cleanly, then 
    echo "All is Well"              #All is Well. 
    exit 0                          #Default exit is 0
#If unsuccessful:   
else                                #it's received an error signal, which prints. 
    echo "Manual Abort" 1>&2        #Prints Manual Abort as error
    exit 1                          #Explicit unclean exit
fi                          

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X