我经常使用 tmux,尤其是在通过 SSH 连接到远程服务器上。我只需运行 即可启动新的 tmux 会话tmux
,并且可以使用 重新连接到现有会话tmux a
。但是,如果我运行tmux a
,而我还没有正在运行的会话,它只会显示以下内容:
$ tmux a
no sessions
这很有道理,因为我没有运行一个。有没有办法检测会话是否正在运行,如果已经有一个会话正在运行,则连接到它,但如果没有不是一个正在运行,开始一个新的?
不同于这个问题,我不关心会话名称,因为我不使用它们
答案1
略有不同且更简短的解决方案:运行tmux ls
- 如果输出为空,则创建一个新会话 - 如果没有附加。
$ if [[ -z $(tmux ls) ]]; then tmux; else tmux a; fi
此外,也许这更合乎逻辑且更容易理解,因为您不必考虑错误重定向和退出代码。
答案2
一种可能性是尝试重新连接到现有会话,如果失败(可能是由于没有会话),则启动一个新会话:
$ tmux a > /dev/null 2>&1; if [[ "$?" == "1" ]]; then tmux; fi
(> /dev/null 2>&1
隐藏的no sessions
消息"$?"
是退出代码,我们检查它来确定是否需要启动一个新的)
虽然有点长,但这个方法似乎可行。也许有更好/更短的方法?