Нет, это невозможно из-за особенностей работы tmate (и подобных программ, таких как GNU Screen ).
Весь tmate ввод-вывод проходит через псевдо -tty, или "pty". У этого есть две стороны, которые я буду называть стороной пользователя и стороной процесса. *Сторона процесса имеет три потока данных (последовательности байтов ):она отправляет данные в stdin
процесса и считывает данные из stdout
и stderr
процесса. *Пользовательская сторона имеет два потока данных, :она считывает ввод от пользователя (, например. то, что он набирает ), которое затем отправляется в поток stdin
на стороне процесса и записывает данные пользователю, которые представляют собой смесь всего, что читается со стороны процесса stdout
и stderr
.
Что делает tmate, так это добавляет дополнительный уровень перед pty, который берет все байты, выводимые с пользовательской стороны pty, и отправляет копию каждого байта каждому клиенту tmate, считывает все входные данные со всех клиентов и отправляет это, смешанный, к pty.
Из этого вы можете видеть, что на стороне процесса pty процесс, читающий со стандартного ввода (bash
, vim
или чего-то еще ), не может узнать, какой клиент отправил какой-либо конкретный байт, или даже что там несколько клиентов (или вообще какие-либо клиенты ). Таким образом, процесс, который генерирует "курсор" для этого сеанса, не может иметь несколько курсоров.
Если вы хотите, чтобы пользователи выдавали команды по отдельности, они должны отправлять их в отдельные процессы оболочки, что означает отдельные сеансы tmate.