因此,举例来说,我需要在两个运行的用户之间运行 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 脚本中。