MacOSXでアプリを実行するbashスクリプトを作成する最も簡単な方法を知りたいです(これはUNIXベースのシステムなので、これが正しい場所だと思いました)。プログラムが終了するのを待ちます。出口がクラッシュではなかった場合は、もう一度実行します。それ以外の場合は、クラッシュレポートウィンドウを開いたままにして終了します。
このスクリプトは、クラッシュするか手動で終了するまで永久に実行したいです。
私は漠然とした考えを持っていますが、よくわかりません。ここに私がこれまでに持っているものがあります:
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 while loops が行うことです:
while /path/to/application.app
do
:
done
アプリケーションを実行し、終了した場合はループの本体を実行します。 :
は Shellのno-opコマンド です(ループには本体が必要なので、ここに記述します)。その後、先頭に戻り、プログラムを再度実行します。失敗した場合、ループは実行を停止し、スクリプトは終了します。
ただし、実行しているのは通常のMacアプリケーション(.app
)のようです。その場合、いくつかの問題が発生します。 1つは、アプリケーションディレクトリを直接実行するのではなく、 open
コマンド を使用する必要があることです:open /path/to/application.app
。
もう1つは、open
を実行すると、アプリケーションの処理内容に関係なく、通常はすぐに成功して終了するということです。これは完全に普遍的というわけではありませんが、ほとんどの場合はそうです。ある場合は、-W
オプションを使用して、アプリケーションが終了するまでopen
を強制的にブロックできます:open -W /path/to/application.app
。アプリケーションがすでに実行されている場合は、既存の実行が終了するまで待機します。
それがどれほどの問題であるかは、実行しているアプリケーションによって異なります。うまく再生されない場合は、シェルからこれを行うのが最善の選択肢ではない場合があります。その場合は、おそらくAppleScriptを使用するほうがよいでしょう。これについては、 Ask Different で確認できます。
私はこれをテストしました:
#!/bin/bash
while <your_cmd_here>
do
true
done
これは、コマンドの戻りコードをPOSIXスタイルでテストすることで機能します。 0はOKを意味し、それ以外はエラーとして処理できます。