画面は、メイン端末にジョブが完了して閉じられたことを示す信号を送信します。

画面は、メイン端末にジョブが完了して閉じられたことを示す信号を送信します。

引用するここ壁紙セッションでスクリプトを実行し、それ自体を閉じることに関連しています。

screen -dmS myscreen bash -c 'command1; command2;'

ユーザーに通知できるように、screen myscreenの実行が完了したことをデフォルトの端末にどのように通知しますか?それ以外の場合は、自動的に完了して閉じます。

ベストアンサー1

を呼び出すと、screen -dm現在のシェルに関係なく別のセッションが開始されます。新しいセッションは現在のシェルのサブセッションではないため、ある種の使用確認ループを使用して直接状態を調べる必要があります。

1つのオプションは、出力を調べてscreen -ls myscreen「...でソケットが見つかりません」と比較することです(現在実行中......に画面があります...(分離済み)...に1つのソケットがあります...」の出力で構成されています)。 「コントラスト...」)これは単一の「myscreen」セッションのみを実行すると仮定します。

while ! screen -ls myscreen | grep -q 'No Sockets found in'; do sleep 1; done

このscreen -lsコマンドは、単にソケットディレクトリの内容を分析することで直接確認できます。ソケットファイルは通常$SCREENDIRテストされたシステムです。に配置されますSCREENDIR=/var/run/screen。次のループは、1つ以上のファイルがワイルドカードと一致する限り成功し、そのファイルがもう存在しない場合に終了します。

while ls /var/run/screen/S-"$LOGNAME"/*.myscreen > /dev/null 2>&1; do sleep 1; done

これはまだ「myscreen」という画面セッションのみが開始されたという前提に依存します。

同じ名前で複数のセッションを開始できる場合は、各セッションに対応するPIDを選択するときにさらに注意する必要があります。

おすすめ記事