我使用 tmux 有一段时间了,我很满意。因为我大部分时间都需要它,所以我把它作为我的默认 shell(准确地说是 guake)。
这很好,我对此非常满意。
但有时,我需要退出 tmux 并拥有一个干净的 shell,但由于我默认使用 tmux,因此终止会话将导致稍后出现另一个 tmux。
所以,我的问题是:是否可以用给定的 shell替换tmux 进程?
exec
当然,类似的东西是行不通的,因为它替换了 tmux 内部的 shell 而不是 tmux 本身。
我不认为 tmux 能做到这一点。如果您了解 C 编程,那么修补应该很容易。
您可以做的一件事是从包装 shell 脚本调用 tmux,并让脚本决定是否退出。向包装器发送信号,告诉它在 tmux 退出时执行交互式 shell。这是包装器脚本的未经测试的概念验证:
export TMUX_PARENT_PID=$$
trap 'exec bash -i' USR1
tmux
Run Code Online (Sandbox Code Playgroud)
在~/.tmux.conf
:
update-environment DISPLAY WINDOWID SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION TMUX_PARENT_PID
Run Code Online (Sandbox Code Playgroud)
从 tmux 内部,分离后获得 shell 提示:
TMUX_PARENT_PID=$(tmux show-environment | sed -n 's/^TMUX_PARENT_PID=//p')
kill -USR1 $TMUX_PARENT_PID
tmux detach-client
Run Code Online (Sandbox Code Playgroud)