J'aimerais connaître la façon la plus simple de créer un script bash qui exécutera une application dans MacOSX (c'est un système basé sur UNIX, j'ai donc supposé que c'était le bon endroit). attendez la fin du programme. Si la sortie n'était pas un crash, exécutez-la à nouveau. Sinon, laissez la fenêtre de rapport de plantage ouverte et quittez.
J'aimerais que ce script s'exécute pour toujours jusqu'à ce que le crash ou la résiliation manuelle.
J'ai une vague idée mais pas sûre. Voici ce que j'ai jusqu'à présent:
echo "Launching Autorun…"
if ["$1" -eq "0"]; then
# Application exited successfully. Restarting.
/path/to/application.app
else
# An error occured. Do nothing and exit.
exit
fi
bash
shell-script
osx
Ben Crazed Up Euden
la source
la source
Réponses:
C'est ce que font les boucles Bash while :
Il exécutera l'application et s'il se termine correctement, exécutez le corps de la boucle.
:
est la commande no-op du shell (la boucle doit avoir un corps, c'est ce que nous y mettons); après cela, il revient en haut et exécute à nouveau le programme. S'il échoue, la boucle s'arrête et le script se ferme.Cependant, il semble que ce que vous exécutez soit une application Mac ordinaire (
.app
): il y a quelques problèmes qui se posent dans ce cas. La première est que vous devez utiliser laopen
commande , plutôt que d' exécuter le répertoire d'applications directement:open /path/to/application.app
.L'autre est que lorsque vous le faites,
open
cela se terminera généralement immédiatement avec succès, indépendamment de ce que l'application continue à faire: ce n'est pas absolument universel, mais la plupart le seront. Si votre un fait, vous pouvez utiliser l'-W
option pour forceropen
à bloquer jusqu'à la fin de l' application:open -W /path/to/application.app
. Notez que si l'application était déjà en cours d'exécution, cela attendra également la fin de l'exécution existante.L'ampleur d'un problème dépend de l'application que vous exécutez. Si cela ne fonctionne pas correctement, cela peut ne pas être la meilleure option. Dans ce cas, vous feriez probablement mieux d'utiliser AppleScript, que vous pouvez poser sur Ask Different .
la source
open
ne renvoie l'échec que pour certaines erreurs de démarrage. Les applications sont démarrées par un service système, pas directement, il n'y a donc pas de canal de communication direct en arrière. Parfois , il est possible de démarrer l'application exécutable directement:/Applications/YourProgram.app/Contents/MacOS/YourProgram
. Sinon, nous dérivons hors d'Unix et vers des endroits où vous obtiendrez une meilleure réponse sur Ask Different . Vous pouvez exécuter AppleScript à partir du shell avecosascript
J'ai testé ceci:
Cela fonctionne en testant le code retour de votre commande, style POSIX. 0 signifie Ok, tout le reste peut être traité comme une erreur.
la source