我正在做以下事情(这只是一个例子,逗号比较复杂):
xterm -fa "Inconsolata" -e tmux new-session -s alpha &
disown %%
tmux new-window -t alpha bash
tmux new-window -t alpha zsh 当我在终端中输入它时,...which工作得很好,给了我一个带有三个窗口的tmux会话的xterm。但是如果我把它放在一个脚本里,它就会停止工作;
no server running on /tmp/tmux-1153/default
no server running on /tmp/tmux-1153/default错误,在新的tmux会话alpha中只有一个窗口。
经过一些实验之后,我发现如果我添加一个
sleep 5(或类似的)在disown和tmux new-window命令之间。很明显,xterm在运行这个命令之前还没有完成设置,所以tmux new-window在创建会话之前就已经运行了,除非我在那里延迟了。
很管用,但不雅致。是否有一种方法可以让tmux等到会话alpha结束?
发布于 2016-07-01 07:17:42
您可以通过两种方式来实现这一点:
sleep方法。除了选择太短的时间有时失败之外,我认为使用sleep没有什么问题。要想防伪,就用时间吧!tmux有会话;做睡眠1;完成或同时!tmux有会话-t alpha;做睡眠1;完成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会话存在为止。
https://unix.stackexchange.com/questions/293233
复制相似问题