tmuxセッションからベースセッションに何かをエコーする

tmuxセッションからベースセッションに何かをエコーする

次のコードを含むスクリプトがあります:

#!/bin/bash
tmux new-session -d bash
    sleep 1d
    echo 1 day passed
    tmux kill-session

私の知る限り、エコーは tmux セッションの stdout に 24 時間後に表示されますが、基本的な Bash セッション (オペレーティング システムを起動した後のセッション) には表示されません。

tmux セッション (もちろん、基本的な Bash セッションの 1 層上) からのエコーが、基本セッションに印刷されるようにするにはどうすればよいでしょうか?

目的はsleep時間フェーズを活用することです別のセッションではなく、その下にあるすべてのコマンドからの出力を取得します私のセッション。

もちろん、セッションが使用できなくなったり「スリープ状態」になったりするため、ベース セッションで sleep を使用することはできません。

答え1

エコーはtmuxセッションの標準出力に24時間後に表示されます。

スクリプトから開始したセッションを参照する場合tmux、これは当てはまりません。bashスクリプトを実行しているプロセスはtmux new-session -d bash終了を待機し、その後実行されます。新しく作成されたセッション内の他のセッションは終了しませんが、これは現在無関係であるため、ほとんど即座に終了することにsleep 1d注意してください。tmux new-session -d bash-dbashtmux

遅延をに変更してsleep 10スクリプトを実行します。しばらく待つとecho現在ターミナル。次に、tmux ls新しい無駄なセッションが残っているかどうかを確認するために呼び出します。それにアタッチして、echoそこに何も -ed されていないことを確認できます。


sleepセッションが使用できなくなるため、ベースセッションでは使用できません

フォアグラウンドで実行中のスクリプトも同様です。バックグラウンド ジョブはどうでしょうか?tmuxまったく必要ありません:

(sleep 20s; echo surprise) &

一般的にはできる適切な権限があれば、別の端末に書き込むことができます。以下は、私が Debian で実行できることです。セッション B から書き込み、テキストをセッション A で表示したいとします。まず、 A の実際のbashデバイスが何であるかを知る必要があります。stdout

readlink /proc/$pid_of_bash_A/fd/1

A内では、特別なパラメータbashのおかげでこれが簡単になります:$$

readlink /proc/$$/fd/1

私の場合の出力は次/dev/pts/3のようになります。セッション B では次のようになります。

echo Hello World! > /dev/pts/3

関連情報