tmuxソケットセッションの実行中にどのようにコマンドを実行できますか?

tmuxソケットセッションの実行中にどのようにコマンドを実行できますか?

たとえば、実行中の2人のユーザー間で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

したがって、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これらすべてをシェルスクリプトでラップします。

おすすめ記事