如果 shell 命令中的 运行 tmux resizep 无法按预期工作

tmux resizep not working as expected if run in shell command


我正在尝试从 bash 脚本设置一个 tmux 会话,而不使用像 tmuxinator/tmuxp/...

这样的任何会话管理器

如果我运行这个代码

#!/bin/sh

tmux \
    new '/path/to/a/script.sh' \; \
    splitw -v '/path/to/another/program' \; \
    selectp -U \; \
    resizep -y 4 \;

它可以工作,除了一件事:根据 man tmux,我希望它将顶部窗格的大小调整为 4 行,但它会将其调整为可变的行数,具体取决于终端的大小 window(不一定是4行,也不是window高度的4%)。

如果我删除 resizep 行

#!/bin/sh

tmux \
    new '/path/to/a/script.sh' \; \
    splitw -v '/path/to/another/program' \; \
    selectp -U \;

然后我从会话内部手动 运行 :resizep -y 4 tmux 命令,然后它有效地将其大小调整为 4 行。

有人知道为什么会这样吗?我该怎么做才能解决?

根据man tmux

规格
OS: 拱门 Linux
WM: dwm (suckless)
终端:ts(suckless)
Shell: bash

编辑:我在 ts/bash shell 中执行这个 bash 脚本,所以在我执行它的那一刻, shell window 已经存在及其宽度和高度。

好的! 最后我解决了它(差不多一年后),它是如此简单......

我刚刚为会话添加了一个名称,并在 resizep 命令中指定了会话名称和 window 编号。

我把代码贴在这里,也许对以后的人有帮助。

tmux \
    new '/path/to/a/script.sh' \; \
    rename "session_name" \; \
    splitw -v '/path/to/another/script.sh' \; \
    selectp -U \; \
    resizep -t "session_name:1" -y 4 \;

注意会话名称中的 1。通常它是 0 但在我的 .tmuxrc 中我设置了 set -g base-index 1