tmuxを使用して新しいウィンドウを分割し、この新しいウィンドウでコマンドを実行する方法は?

tmuxを使用して新しいウィンドウを分割し、この新しいウィンドウでコマンドを実行する方法は?

頑張りました

tmux -c "shell command" split-window

しかし、うまくいかないようです。

tmux split-window新しいウィンドウを分割するために使用します。

修正する:

を使用するとtmux split-window 'exec ping g.cn'pingコマンドを実行できますが、停止すると新しいウィンドウが閉じます。

答え1

使用:

tmux split-window "shell command"

コマンドsplit-windowの構文は次のとおりです。

 split-window [-dhvP] [-c start-directory] [-l size | -p percentage] [-t
         target-pane] [shell-command] [-F format]

(からman tmux、「窓および窓」セクション)。順序が重要です。コマンドが来なければなりません。後ろに表示される前のオプションは単一の引数である必要があるため、スペースがある場合は引用符を付ける必要があります。


このようにすばやく終了するコマンドの場合は、最初にオプションを設定ping -cできます。remain-on-exit

tmux set-option remain-on-exit on
tmux split-window 'ping -c 3 127.0.0.1'

ウィンドウは完了後も開いたままですが、ping手動で閉じるまで「死」と表示されます。

オプション全体を変更したくない場合は、別の方法があります。このコマンドは、sh -c最後にウィンドウをアクティブに保つために使用できるrunを使用します。

tmux split-window 'ping -c 3 127.0.0.1 ; read'

これにはシェルが使用されます。readこのコマンドは、メインコマンドが完了した後にユーザーが改行文字を入力するのを待ちます。この場合、コマンド出力はEnterウィンドウを押すまで保持され、自動的に閉じます。

答え2

bash --rcfile

この手法は、新しいシェルを開き、コマンドを実行した後、コマンドが完了した後もそのまま残ります。

tmux-split-cmd() ( tmux split-window -dh -t $TMUX_PANE "bash --rcfile <(echo '. ~/.bashrc;$*')" )
tmux-split-cmd 'cd; pwd; ping google.com'

または、コマンドに特殊な端末文字がない場合(例;

tmux-split-cmd ping google.com

これは以下を使用します。

もう一つの興味深いバリエーションは次のとおりです。

tmux-split-cmd-uniq() (
  if [ "$(tmux list-panes | wc -l | cut -d' ' -f1)" -ne 1 ]; then
    tmux kill-pane -t 1
  fi
  tms "$@"
)

すでに存在する場合は、前の分割を終了し、常に追加の分割を1つだけ維持するのに役立ちます。

答え3

私が提案する

tmux split-window
tmux send "ping -c 3 127.0.0.1" ENTER

利点は、新しいウィンドウが常にアクティブになり、決して閉じられないことですが、以前の答えはtmux split-window 'ping -c 3 127.0.0.1 ; read'ユーザーがを押した後にセッションを閉じることですEnter

関連情報