tmux セッションに接続し、コマンドを実行します。

tmux セッションに接続し、コマンドを実行します。

セッションに接続しているときにTmuxでコマンドを実行するにはどうすればよいですか?

すぐにコマンドを添付して実行したいです。

ドキュメントを読みましたが、キーだけが送信されますが、これは私の要件には合いません。

答え1

実行中のtmuxセッションに接続し、特定のコマンドを実行する新しいウィンドウを作成できます。

tmux attach \; new-window vim

これは既存のウィンドウでvimを生成しないことに注意してください。これを行うツールがなければ、実際には意味がありません。 @Falcon Momotが指摘したように、既存のウィンドウは何でも実行できます。問題が発生します。メソッドコマンドは「Send Key」です。

答え2

私はこの問題に対する解決策を探しています。これは、「set-buffer」および「paste-buffer」コマンドを使用して実行できます。

tmux att -t <session-name> \; set-buffer "<command>^M" \; paste-buffer

完全な例は次のとおりです。

# let's start with two sessions running bash
tmux new -s theOtherSession \; detach
tmux new -s astropanic \; rename-window main-window \; detach

# attach to the 'astropanic' session, run a directory listing, output
# current datetime, then detach. Note for carriage return (^M) type ^V^M
tmux att -t astropanic \; find-window main-window \; set-buffer "ls;date^M" \; paste-buffer \; detach

# reconnect to check status
tmux att -t astropanic

答え3

tmux コマンドまたはシェル/OS コマンドのどちらを実行するかは不明です。それぞれの例は次のとおりです。

#!/bin/bash

cd

# give the session a name; makes it easier to reuse code lines
_SNAME=Generic

# start a whole new tmux session
tmux new-session -s $_SNAME -d -x 140 -y 35

# can set tmux options
tmux set-option -t $_SNAME default-path /opt/foo/build

# create a new window that's just a shell
tmux new-window -t $_SNAME -n build -d

# create a new window that's running a program
tmux new-window -t $_SNAME -n vim -d vim

これにより、セッションは未接続のままになります。これを追加するには、シェルスクリプトの最後に次の行を追加します。

# attach to the new session
tmux attach -t $_SNAME

答え4

これはTmuxを起動または接続し、その中でコマンドを実行する小さなスクリプトです。コマンドが実行されると、Tmuxは終了します。

#!/bin/sh -x
SESSION_NAME=foo

tmux has-session -t $SESSION_NAME 2>/dev/null
if [ $? -ne 0 ]
then
  tmux new-session -d -s $SESSION_NAME "$*"
fi
exec tmux attach -t $SESSION_NAME

使用例:

$ ./script-above 'echo hello world && sleep 10'

関連情報