しばらくして、対話型セッションでアプリケーションを再起動し続けます。

しばらくして、対話型セッションでアプリケーションを再起動し続けます。

だから私はこれが実際に適用されるものが少ない複雑なユースケースであることを知っています。だから残念ながら、これまで多くの有用な指示が見つかりませんでした。

デフォルトでは、ログイン時にCLIアプリケーションを自動的に実行し、シャットダウン時に設定された時間(1分など)が経過した後にアプリケーションを再起動するターミナル専用セッションがあります。シェルはアプリケーションのシャットダウン中に正常に機能する必要があります。

これは私の現在の設定です(これまではうまく機能します)。

  • 端末専用セッションがあります(GUIなし、この場合はLinux Mint)。
  • ログインすると、対話型CLIアプリケーションが自動的に実行されます(たとえば、.bashrcに追加すると簡単に実行されます)。
  • ユーザーが自分のCLIアプリケーションを終了したら、通常のbash端末に戻ってコマンドを実行できます(必要に応じて)。

今までは分からない難しい部分が出てきます。

  • タイムアウトに達するまで端末を使用可能な状態に保ちながら、短時間でユーザー端末でアプリケーションを自動的に再起動するにはどうすればよいですか。
  • ユーザーは、bashで潜在的にダメージを与える可能性のある操作(他のシェルの開始、実行中のプロセスの終了、またはログアウトなど)を行わないと仮定できます。すばやく完了する1〜2つの異なるコマンドを実行できるはずですが、それ以外は何も実行できません。

私はアプリケーションの実行と新しいbashを起動するコマンドの実行を交互に(ループ内で)実行するスクリプトを実行してこれを実行しようとしましたが、timeout正しく機能しませんでした。 timeoutコマンドを使用して対話型bashセッションを開始できないようです。したがって、これは可能なアプローチかもしれませんが(正しい構文へのポインタは大歓迎です)、他の方法やアイデアもまったく問題ありません。

答え1

私は避難所でこの疑似論理を考慮するのと同じ考えを持っています。

answersRoomOneArray = {puzzleOneAnswer, puzzleTwoAnswer ... puzzleNAnswer}
# Room 1 Puzzles

puzzleOne () 
# Function to return a value
return puzzleOneAnswer

# Continue puzzles until Array is Full
...
if arrayCorrectRoomOne {} = answersRoomOne{} then
    unlockDoor ()
else
   punish ()
fi

上記の形式を各会議室端末で使用し、arrayCorrectスマート端末の場合は、参加者がアクセスできないディレクトリのどこかに保存できます。このモジュラーアプローチでは、タイマーなしで「コントローラスクリプト」は必要ありません。スクリプトを再起動する必要がある場合は、画面を消去して関数punish()から再起動してください。 「死ぬ」前にあまりにも多くの回数を試したい場合は、punish()到達した回数を数えるカウンターを追加し、X回試した後に参加者を「殺す」。

関連情報