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호출은 연결된 모든 클라이언트의 보기를 변경합니다.

실행 중인 프로그램의 보기와 같은 창 세트를 공유하고 싶지만 각 클라이언트가 서로 다른 보기를 갖게 하려면 세션을 생성해야 합니다. -tto 매개변수를 사용하여 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이 모든 것을 쉘 스크립트로 래핑합니다.

관련 정보