答案1
不,由于 tmate(以及类似程序,例如 GNU Screen)的工作方式,这是不可能的。
所有 tmate I/O 都通过伪 tty 或“pty”。这有两个方面,我将其称为用户方和进程方。 * 进程端有3个数据流(字节序列):发送数据到stdin
进程的数据,从进程的stdout
数据读取数据。 stderr
* 用户端有两个数据流:它从用户读取输入(例如他输入的内容),然后将其发送到进程端stdin
流,并将数据写入用户,这是从进程端读取的所有内容的混合stdout
和stderr
。
tmate 所做的是在 pty 前面添加一个额外的层,该层获取 pty 用户端的所有字节输出,并将每个字节的副本发送到每个 tmate 客户端,并读取来自所有客户端的所有输入并将其混合发送,到 pty。
由此您可以看到,在 pty 的进程端,从 stdin(bash
、、vim
或其他)读取的进程无法知道哪个客户端发送了任何特定字节,甚至无法知道有多个客户端(或根本没有任何客户端) 。因此,为该会话生成“光标”的进程无法拥有多个光标。
如果您希望用户单独发出命令,他们需要将它们发送到单独的 shell 进程,这意味着单独的 tmate 会话。