プログラムが完了するまでtmuxブロックを作成します。

プログラムが完了するまでtmuxブロックを作成します。

私はtmuxのリモートコントロール機能に非常に感動しました。

tmux new-window -t p12346 'echo foo;sleep 10' 

これにより、p12346というセッションに新しいウィンドウが作成され、画面に何も印刷されません。ギイ。しかし、上記のコマンドで睡眠が完了するのを待ってから戻ってくるように指示するにはどうすればよいですか?つまり、同じことをしたいのですが、実行には10秒かかります。

time tmux new-window -t p12346 'echo foo;sleep 10' 

背景

これがうまくいけば、GNU Parallelの機能になります。現在実行中のタスクは各ウィンドウからアクセスできるため、tmux各タスクの進行状況をリアルタイムで追跡できます。

したがって、tmuxフォアグラウンドでは実行されません。ユーザーはここに接続する必要があります。

ベストアンサー1

マルチプレクサ1.8では、wait-for目的のタスクを実行するのに役立つコマンドが導入されました。

time tmux new-window -t p12346 'echo foo;sleep 10;tmux wait-for -S p12346-neww-done' \; \
          wait-for p12346-neww-done

「チャンネル」名(p12346-neww-done上記の例では)は、必要に応じて指定できます(両方の場所で同じ場合)。複数の呼び出しが同時に行われると予想される場合は、一意の名前を使用することもできます。各通貨値について)。重要なことは、new-window(同じ命令の一部として)命令の後に信号を「待つ」ことです。マルチプレクサコマンドを実行するので、セミコロンを避けてください。マルチプレクサシェルではなく処理する必要があります)ウィンドウコマンドの最後のステップにシグナルを送信します。

醜いまたは不快な方法で命令シーケンスを中断することをより強力にする必要がある場合は、シェルトラップを使用して信号を送信できます(読みやすくするためにビット(?)を並べ替える)。

time \
tmux new-window -t p12346 '
       trap "tmux wait-for -S p12346-neww-done" 0
       echo foo
       sleep 10
       ' \; wait-for p12346-neww-done

おすすめ記事