
我有一個帶有以下程式碼的腳本:
#!/bin/bash
tmux new-session -d bash
sleep 1d
echo 1 day passed
tmux kill-session
AFAIU,迴聲將在 24 小時後出現在 tmux 會話的標準輸出中,但不會出現在我的基本 Bash 會話(啟動作業系統後的會話)中。
我如何確保 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
-es 到你的目前的終端。接下來呼叫tmux ls
以查看是否留下了一個新的無用會話。您可以附加到它並驗證echo
那裡沒有任何內容。
我無法
sleep
在我的基本會話中使用,因為它會使會話無法使用
您的腳本在前台運行時也是如此。後台工作怎麼樣?你tmux
根本不需要:
(sleep 20s; echo surprise) &
一般來說你能如果您有適當的權限,則可以寫入另一個終端。以下是我在 Debian 中可以執行的操作。假設我想從會話 B 寫入,因此文字在會話bash
A 中可見。stdout
readlink /proc/$pid_of_bash_A/fd/1
bash
由於$$
特殊參數,在 A 內部變得更簡單:
readlink /proc/$$/fd/1
輸出是/dev/pts/3
我的情況。然後在會話B中:
echo Hello World! > /dev/pts/3