tmux new-window --- 等到会话结束?

tmux new-window --- 等到会话结束?

我正在做以下事情(这只是一个例子,逗号更复杂):

xterm -fa "Inconsolata" -e tmux new-session -s alpha &
disown %%
tmux new-window -t alpha bash
tmux new-window -t alpha zsh 

...当我在终端中输入它时,效果非常好,为我提供了一个带有三个窗口的 tmux 会话的 xterm。但是如果我把这个东西放入脚本中,它将停止工作;

 no server running on /tmp/tmux-1153/default
 no server running on /tmp/tmux-1153/default

错误,并且新tmux会话中只有一个窗口alpha

经过一些实验,我发现它将要如果我添加一个,再次工作

sleep 5

(或类似)在disowntmux new-window命令之间。显然,在运行此命令之前 xterm 尚未完成设置,因此tmux new-window在创建会话之前运行,除非我在那里设置延迟。

它可以工作,但并不优雅。有没有办法告诉tmux等待会话alpha结束?

答案1

您可以通过两种方式执行此操作:

  1. 使用该sleep方法。我认为使用没有什么问题,sleep除了有时会因为选择太短的时间而失败之外。为了万无一失,请使用

    while ! tmux has-session; do sleep 1; done
    

    或者

    while ! tmux has-session -t alpha; do sleep 1; done
    
  2. 使用类似的东西xtoolwait它在后台启动 X 客户端(您的终端仿真器),并在映射其窗口后返回。

如果您选择第二个选项(这可能是最好的),请记住删除&启动终端的命令末尾的 ,并且它对于disown工作来说也变得不必要。

命令变为:

xtoolwait xterm -fa "Inconsolata" -e tmux new-session -s alpha
tmux new-window -t alpha bash

如果xtoolwait尚未安装在您的 Unix 上,它可能会作为软件包提供(它已经存在了很长时间)年龄)。使用您选择的包管理器来安装它。

编辑tmux:从评论来看,即使xtoolwait正在使用终端,在映射其窗口后似乎也需要很长时间才能生成。因此,在这种情况下,我会循环调用,sleep 1直到tmux存在所需的会话。

相关内容