tmuxセッションからデフォルトセッションに何かをエコーし​​ます。

tmuxセッションからデフォルトセッションに何かをエコーし​​ます。

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

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

AFAIU、エコーは24時間後にtmuxセッションのstdoutに表示されますが、デフォルトのBashセッション(OS起動後のセッション)には表示されません。

tmuxセッション(もちろん、Bashセッションの上にあるレイヤー)のエコーが基本セッションで印刷されるようにするにはどうすればよいですか?

sleep目標は時間ステップを活用することです。もう一つセッションですが、その下のすべてのコマンドの出力を取得するには私の会議。

もちろん、基本セッションではスリープモードは使用できません。これは、セッションが利用できない、または「眠い」状態になるためです。

答え1

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

スクリプトで開始されたセッションを参照している場合はtmuxそうではありません。bashスクリプトを実行するプロセスは、tmux new-session -d bash終了を待ってから実行するsleep 1dなどのタスクを実行します。通知はtmux new-session -d bashほとんどすぐに終了します(新しく作成されたセッションの他のものは終了しませ-dんが、今は関係ありません)。bashtmux

遅延をに変更してsleep 10スクリプトを実行します。しばらく待つと、echoその内容が表示されます。現在の端末。次に呼び出して、tmux ls役に立たない新しいセッションが残っていることを確認してください。それに接続して、echoそこに何もないことを確認できます。


sleepセッションが利用できなくなるため、プライマリセッションでは使用できません。

スクリプトがフォアグラウンドで実行される場合も同様です。背景作業はどうですか?tmuxまったく必要ありません。

(sleep 20s; echo surprise) &

一般的に言えば、できる適切な権限があれば、他の端末に書き込むことができます。 Debian でできることは次のとおりです。bashセッションAでテキストが表示されるように、セッションBで文を書きたいとします。まず、stdoutAの実際のデバイスが何であるかを知る必要があります。

readlink /proc/$pid_of_bash_A/fd/1

bash特別なパラメータのおかげで、$$A内部ではより簡単になりました。

readlink /proc/$$/fd/1

出力は/dev/pts/3私の場合です。その後、セッションBで:

echo Hello World! > /dev/pts/3

関連情報