我有一个包含以下代码的脚本:
#!/bin/bash
tmux new-session -d bash
sleep 1d
echo 1 day passed
tmux kill-session
AFAIU,回声将在 24 小时后出现在 tmux 会话的标准输出中,但不会出现在我的基本 Bash 会话(启动操作系统后的会话)中。
我如何确保来自 tmux 会话(当然是我的基本 Bash 会话之上的一层)的回声将打印在我的基本会话中?
目的是在另一个sleep
会话中利用时间阶段,但在我的会话中获得所有命令的输出。
当然,我不能在我的基本会话中使用睡眠,因为它会使会话无法使用或“昏昏欲睡”。
如果您指的是
tmux
从脚本开始的会话,那么这是不正确的。bash
执行脚本的进程将等待tmux new-session -d bash
退出,然后执行sleep 1d
,依此类推。通知tmux new-session -d bash
几乎立即退出,因为-d
(bash
新创建的tmux
会话中的另一个没有退出,但现在无关紧要)。将延迟更改为
sleep 10
并运行脚本。稍等片刻,您将看到它echo
-es 到您当前的终端。下一次调用tmux ls
以查看留下了一个新的无用会话。您可以附加到它并验证echo
那里没有任何内容。您的脚本在前台运行时也是如此。后台工作怎么样?你根本不需要
tmux
:一般来说,只要您有适当的权限,您就可以写入另一个终端。以下是我可以在我的 Debian 中执行的操作。假设我想从会话 B 写入,因此文本在
bash
会话 A 中可见。首先我需要知道stdout
A 的实际设备是什么:bash
由于$$
特殊参数,在A 中这更简单:输出是
/dev/pts/3
在我的情况下。然后在会话 B 中: