当我手动启动时多路复用器tmux
通过从我的 Bash 交互式 shell发出,我可以稍后暂停多路复用器没有CTRL-BZ问题。按此组合键将使我返回到父进程,即我从中启动的 Bash 交互式 shell多路复用器。
但我的配置文件的最后有以下代码片段重击交互式 shell ( ~/.bashrc
) 定义:
# Test if neither _Tmux_ nor _Screen_ is running.
if ! [[ -n "$TMUX" || "$TERM" =~ screen ]]; then
# Test if _Tmux_ is on the `$PATH`.
if type -p tmux &> /dev/null; then
# Try to attach to latest unattached session or start a new one.
{ tmux attach-session || tmux new-session; } &> /dev/null
fi
fi
此代码片段自动启动多路复用器每当我开始重击交互式 shell 假定尚未运行终端多路复用器程序。
但CTRL-BZ这次按下暂停多路复用器让我处于无响应的父进程中,即自动启动的 Bash 交互式 shell多路复用器来自其启动文件 ( ~/.bashrc
)。
除了分离之外多路复用器从会话中并将其重新附加到会话,有没有办法使多路复用器以这样的方式暂停,以便我可以继续在其父级中工作重击交互式 shell 并稍后返回,将其前景化为fg
?
请注意,出于各种原因,我打算让重击叉多路复用器并且不将其自身替换为 ( exec
)。
答案1
set -m
您应该在.bashrc
开始之前打开作业控制tmux
。
Bash 运行启动文件就像.bashrc
禁用作业控制一样。从外壳程序:
#if defined (JOB_CONTROL)
/* Startup files should be run without job control enabled. */
old_job_control = interactive_shell ? set_job_control (0) : 0;
#endif
请注意,它C-b C-z
本身并没有在后台设置 tmux;缺乏工作控制在上层 shell 中,SIGTSTP
tmux 发送的信号只会导致其停止;该tmux
过程将仍然位于终端的前台进程组中(尽管在某些终端模拟器上使用 // 转义符exit_ca_mode
从备用屏幕进行欺骗性切换rmcup
,例如)te
xterm