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


28

私が試してみました

tmux -c "shell command" split-window

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

を使用してtmux split-window、新しいウィンドウを分割できます。

更新

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


4
man tmux | less -p remain-on-exit...
jasonwryan 14

回答:


38

つかいます:

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、これを悪用してウィンドウを最後まで生き続けることができます:

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

ここでは、シェルreadコマンドを使用して、メインコマンドの終了後にユーザー入力の改行を待ちます。この場合、コマンド出力はEnterペインを押すまで残り、その後自動的に閉じます。


マイケル・ホーマーに感謝します:-)。今も見つけました/。しかし、新しいウィンドウを閉じないようにするにはどうすればよいですか?
atupal

@atupal:edit-set remain-on-exitまたはuseを参照してくださいcmd ; read
マイケルホーマー14

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つの余分な分割のみを保持するのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.