
次のコードを含むスクリプトがあります:
#!/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
-d
bash
tmux
遅延をに変更して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