如何在运行 tmux 套接字会话时运行命令?

如何在运行 tmux 套接字会话时运行命令?

因此,举例来说,我需要在两个运行的用户之间运行 tmux 套接字

echo foo

要使其在普通 tmux 上运行,最好这样做tmux new -d -s Foo "echo foo"

但是,当使用 -S 运行 tmux 时,我似乎找不到在会话启动时自动运行命令的方法。假设我们的路径是 /home/user/tmux

我会运行tmux -S /home/user/tmux,然后使用另一个帐户tmux -S /home/user/tmux attach。然而,这并没有留下指定启动命令的机会。我有什么办法可以做到这一点吗?

谢谢。

答案1

因此一种方法是生成一个新窗口然后附加:

tmux -S /tmp/socket new-window -n vi /usr/bin/vi
tmux -S /tmp/socket attach

因此客户端可以创建一个新窗口然后连接到它。

但是,我怀疑 tmux 会话可能没有执行您希望它执行的操作。

没有命令的原因attach是因为会话代表当前在屏幕上看到的视图,该视图在所有连接的客户端之间共享。所以用命令附加有点奇怪。所有客户端都将查看相同的内容,并且new-window调用将更改所有附加客户端的视图。

如果您想共享一组窗口(例如正在运行的程序的视图),但让每个客户端都有不同的视图,那么您需要创建会话。您可以使用-t参数 to 来new-session创建一个与另一个会话共享其窗口的会话。显然,您不能-t与新会话的命令一起使用,这实际上是一个有效的用例,因此您最终会使用该-d标志,然后生成该命令。让事情变得更令人恼火的是,它似乎new-window缺少会话参数,因此您依赖于事物的调用顺序!

tmux -S /tmp/socket new-session -s base  # run once

# For each client
tmux -S /tmp/socket new-session -t client-view -d 
tmux -S /tmp/socket new-window /usr/bin/vi
tmux -S /tmp/socket attach -t client-view

这都是一些拼凑的东西,多年来我一直有效地使用这种方法。 (我的每个终端窗口都是共享 tmux 会话的独特视图)。

您可能对此脚本感兴趣https://github.com/rainerborene/tmx/blob/master/tmx它将所有这些包装到一个 shell 脚本中。

相关内容