プログラムを実行するBashスクリプトを生成し、プログラムがクラッシュせずに終了したら再度実行してください。

プログラムを実行するBashスクリプトを生成し、プログラムがクラッシュせずに終了したら再度実行してください。

MacOSX(UNIXベースのシステムなので、ここが正しいと思います)でアプリケーションを実行するbashスクリプトを作成する最も簡単な方法を知りたいです。プログラムが終了するのを待ちます。競合なしで終了したら、もう一度実行してください。それ以外の場合は、競合レポートウィンドウを開いたまま終了します。

このスクリプトがクラッシュするか手動で終了するまで永久に実行されることを望みます。

曖昧な考えはありますが、確かではありません。これが私が今まで持っているものです:

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

答え1

これはバッシュです。whileループする:

while /path/to/application.app
do
    :
done

アプリケーションを実行し、正常に終了したらループ本体を実行します。:~であるシェルランダムコマンド(ループには本文が必要なので、本文をここに入れます。)その後、一番上に戻ってプログラムを再実行します。失敗すると、ループの実行が停止し、スクリプトが終了します。

ただし、通常のMacアプリケーション()を実行しているようです.app。この場合、いくつかの問題が発生します。まず、次のものを使用する必要があります。open注文する、アプリケーションディレクトリを直接実行する代わりに:open /path/to/application.app

もう1つのことは、これを行うと、openアプリケーションが何をしているかに関係なく、通常はすぐに正常に終了することです。これは絶対に普遍的ではありませんが、ほとんどはそうです。これにより、このオプションを使用してアプリケーションが終了するまで-W強制的にブロックできます。アプリケーションがすでに実行されている場合は、既存の実行も終了するのを待ちます。openopen -W /path/to/application.app

問題の重大度は、実行しているアプリケーションによって異なります。正しく機能しない場合は、シェルでこれを行うのが最善の選択ではない可能性があります。この場合、AppleScriptを使用する方が良いでしょう。さまざまなリクエストをしてみてください

答え2

私はこれをテストしました:

#!/bin/bash
while <your_cmd_here>
do
    true
done

これは、コマンドの戻りコード(POSIXスタイル)をテストすることによって行われます。 0は正常を意味し、他のすべてはエラーと見なすことができます。

関連情報