我想实现以下行为:
当我启动 iTerm2 时,如果有一个 tmux 会话正在运行,则连接到它。如果没有 tmux 会话正在运行,则创建一个并连接到它。
非常感谢任何指点!
答案1
我使用这个脚本,exec
每当我的 shell 作为登录 shell 启动时,它都是 d。您可能需要稍微编辑一下这个脚本...
#/usr/bin/env zsh
local tmux=$1
local sname
local ssh
[[ -z "$tmux" ]] && tmux=tmux
# export COLORTERM to fix some programs
case "$TERM" in
*256color)
export COLORTERM="$TERM" ;;
esac
# build a fancy session name
[[ ! -z "$SSH_CLIENT" ]] && ssh="/$SSH_CLIENT"
sname=$(print -P "%D{%Y-%m-%d-%H-%M-%S}/%n/%y$ssh")
# make sure session 0 exists
$tmux has-session -t 0 2>/dev/null || $tmux new-session -d -s 0
# create our own mirroring session
$tmux new-session -d -s "$sname" -t 0
# this doesn't return until the session is closed or detached
$tmux attach-session -t "$sname"
# kill the mirroring session if it's not dead already
$tmux has-session -t "$sname" 2>/dev/null && $tmux kill-session -t "$sname"
# return to prompt outside of tmux if special file is present
if [[ -f "$TMUX_LEAVE_SHELL_FILE" ]]; then
rm "$TMUX_LEAVE_SHELL_FILE"
exec zsh -i
fi
我的 .zshrc 中的相关部分
# drop into tmux if this is a login shell and we're not in tmux already
if (which tmux >/dev/null) && [[ -o login ]] && [[ -z "$TMUX" ]] && [[ -f ~/etc/script/tmux-login ]]; then
exec zsh "$HOME/etc/script/tmux-login" $(which tmux)
fi
# handy command to detach tmux but keep the shell running (kind-of)
case $TERM in
screen)
alias detach="touch $TMUX_LEAVE_SHELL_FILE && tmux detach" ;;
esac