考えてみてください:
tmux split-window -d program1
program2 # this program depends on some side effects produced by program1
この場合、program2
準備が整う前に始まりますprogram1
。program1
消費される可能性のある副作用が発生すると、信号/出力が送信されますprogram2
。
program1
私の質問:始める前に準備ができるまで待つシェルスクリプトをどのように書くのですかprogram2
?
注意:出力は消費されないため、program2
プロセスprogram1
をパイプで接続してこの問題を解決することはできません。
答え1
解決策が見つかりましたここ。最後に、これはTMUXソリューションではありません(最初は、tmuxがそのウィンドウで実行されているプロセスを同期させるメカニズムを持っていると思いました)。
答えは、名前付きパイプを使用することです。準備ができれば出力が送信されるのでprogram1
必要なのは次のとおりです。
mkfifo /tmp/pipe
tmux split-window -d "program1 > /tmp/pipe 2>&1"
signal=`cat /tmp/pipe`
program2 # This will only run after program1 has output something
答え2
次のツールを使用してください。FLOM(無料ロックマネージャ)次のことができるはずです。
tmux split-window -d "flom -- program1"
flom -- program2 # this program depends on some side effects produced by program1
「program1」が「program2」の前に開始された場合、予想される動作は次のようになります。
- flom は論理リソースを生成し、「program1」に対して特別にロックします。
- flomは「program2」と同じ論理リソースを待ち、「program1」が終了するのを待ちます。