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

He buscado todo esto y no estoy seguro de cómo hacerlo.

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

Por lo que sé, open -W saldrá con estado 0 siempre y cuando 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 cual abre la aplicación y luego espera, si el estado de salida es 0, volverá a abrir la aplicación después del cierre. Sin embargo, esto es lo que quiero es poder detener este script si la aplicación en sí no salió de 0 en lugar de que el command 'abrir' salga con éxito.

En resumen:

Abre MyApp.app

si MyApp.app (no abierto) se bloquea, detenga el script; de lo contrario, vuelva a abrir MyApp.app

  • AppleScript: cómo abrir el terminal a pantalla completa y ejecutar commands
  • Cómo encapsular aplicaciones en mac os
  • ¿Por qué mis utilidades de command-line se ejecutan tan lentamente en mi Mac?
  • Los files no se muestran en Finder
  • Borre el terminal y evite la restauración
  • ¿Cómo creo un enlace simbólico a los files de configuration de MacVim?
  • Pausa y continúa oliendo Wi-Fi en la Terminal usando el command del aeropuerto
  • ¿Cómo abro dos tabs en un panel dividido en iTerm?
  • 2 Solutions collect form web for “Cómo verificar el estado de salida de una aplicación después de usar 'abrir' en shell”

    Mi respuesta es: no se puede open incluso con la bandera -W . En su lugar, utilice un script de shell repeat_run que se puede repeat_run 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 

    La señal de trampa no es necesaria. Puede usar declaraciones 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 
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).