在 tilix 终端模拟器中运行 tmux 会话

在 tilix 终端模拟器中运行 tmux 会话

背景:我使用 Tilix 作为我的主要终端模拟器。在 Tilix 首选项(附截图)中,我已将其设置为当 Tilix 启动时,它将运行以下命令:

/usr/bin/zsh -c "if [[ $(tmux ls 2>/dev/null | grep -q -E '^main.*attached.*'; echo $?) -ne 0 ]]; then tmux attach -t main || tmux new -s main; else /usr/bin/zsh; fi"

Tilix 首选项

这会检查:

  • 如果名为的 tmux 会话main正在运行并且附加了一个窗口
    • 如果失败,它将尝试附加到名为的 tmux 会话main
      • 如果失败,那么它将继续创建一个名为 的新 tmux 会话main并附加到它
    • 否则(如果成功),只需启动普通zsh

所有这些复杂性的原因是,当我第一次启动 tilix 时,它将在 tmux 运行并连接到它的情况下启动它。任何新的 tilix 会话或者新的 tilix 窗口lauched 不会创建或尝试连接到名为 main 的现有 tmux 会话。 (Tilix 有自己的多窗口和窗格,不要与 tmux 会话混淆)

我想知道是否可以压缩上面的代码块,或者是否可以提出上面代码块的更好版本。

答案1

命令替换有点过头了,但除此之外看起来还不错。直接使用退出代码即可if

如果^main.*attached.*找到了该模式,那么该模式^main.*attached也将被发现,同样,如果未找到较长的模式,则较短的也不会找到。较短模式的匹配可能会更快。

/usr/bin/zsh -c "if ! tmux ls 2>/dev/null | grep -q -E '^main.*attached'; then tmux attach -t main || tmux new -s main; else /usr/bin/zsh; fi"

答案2

如果你的 tmux 足够新,你可以这样做:

[ "$(tmux display -pt=main: '#{session_attached}' 2>/dev/null)" -gt 0 ] && exec tmux new -Asmain || exec zsh

相关内容