使用 tmux 仅在终端启动时执行脚本

使用 tmux 仅在终端启动时执行脚本

我已将 Linux Mint 18.3 上的 Gnome 终端配置为始终tmux默认启动,只需在 中添加几行~/.bashrc即可。这非常有效,只是我还通过将其添加到 来运行另一个脚本(当我打开终端时显示的那些精美的自定义欢迎消息之一)。正如预期的那样,每次我打开终端时都会执行此脚本,因为它是在 中~/.bashrc的执行下定义的。tmux.bashrc

问题是每次我在 中细分窗格tmux或每次创建新选项卡时,都会再次执行相同的脚本。理想情况下,我希望仅在 Gnome 终端首次打开时执行它(例如每次我按下打开终端时),而不是在已打开的终端中创建后续选项卡和窗格时执行它。由于在每个新选项卡和窗格上执行,因此Ctrl+Alt+T实现此目的的最佳方法是什么?~/.bashrc

我遇到过类似的问题这里但该用户希望他们的脚本仅在系统启动时执行。此外,他们创建临时文件作为标志的解决方案在我看来非常不合时宜。有没有更好的方法来实现我想要的?

.bashrc编辑:我通过在我的文件中添加以下几行来执行 Tmux :

# If not running interactively, do not do anything
[[ $- != *i* ]] && return
# Otherwise start tmux
[[ -z "$TMUX" ]] && exec tmux

不幸的是,用

if [[ -z "$TMUX" ]]; then
    exec tmux
    my_script
fi

不起作用。事实上,即使下面的测试用例也不起作用;tmux 被执行,但 和echo "A"echo "B"没有:

if [[ -z "$TMUX" ]]; then
    echo "A"
    exec tmux
    echo "B"
fi

答案1

对于 tmux,用于tmux set-env设置一个环境变量,该变量将提供给该 tmux 会话中的所有新窗格。

if [[ $- == *i* && $TMUX && ! $_DID_GREET ]]; then
    ponysay "Hello!"
    tmux set-env _DID_GREET 1
fi

据我所知,没有与 GNOME Terminal 相当的程序(尽管它可能可以通过 D-Bus 查看终端窗口是否有多个选项卡)。

相关内容