次のコードを含むスクリプトがあります。
#!/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
んが、今は関係ありません)。bash
tmux
遅延をに変更してsleep 10
スクリプトを実行します。しばらく待つと、echo
その内容が表示されます。現在の端末。次に呼び出して、tmux ls
役に立たない新しいセッションが残っていることを確認してください。それに接続して、echo
そこに何もないことを確認できます。
sleep
セッションが利用できなくなるため、プライマリセッションでは使用できません。
スクリプトがフォアグラウンドで実行される場合も同様です。背景作業はどうですか?tmux
まったく必要ありません。
(sleep 20s; echo surprise) &
一般的に言えば、できる適切な権限があれば、他の端末に書き込むことができます。 Debian でできることは次のとおりです。bash
セッションAでテキストが表示されるように、セッションBで文を書きたいとします。まず、stdout
Aの実際のデバイスが何であるかを知る必要があります。
readlink /proc/$pid_of_bash_A/fd/1
bash
特別なパラメータのおかげで、$$
A内部ではより簡単になりました。
readlink /proc/$$/fd/1
出力は/dev/pts/3
私の場合です。その後、セッションBで:
echo Hello World! > /dev/pts/3