セッションに接続しているときに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'