26

I have tried

tmux -c "shell command" split-window

but it does not seem to work.

Using tmux split-window, one can split a new window.

UPDATE:

Using tmux split-window 'exec ping g.cn' can run the ping command , but when stoped the new window will be closed.

  • 4
    man tmux | less -p remain-on-exit... – jasonwryan Aug 29 '14 at 8:07
34

Use:

tmux split-window "shell command"

The split-window command has the following syntax:

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

(from man tmux, section "Windows and Panes"). Note that the order is important - the command has to come after any of those preceding options that appear, and it has to be a single argument, so you need to quote it if it has spaces.


For commands like ping -c that terminate quickly, you can set the remain-on-exit option first:

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

The pane will remain open after ping finishes, but be marked "dead" until you close it manually.

If you don't want to change the overall options, there is another approach. The command is run with sh -c, and you can exploit that to make the window stay alive at the end:

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

Here you use the shell read command to wait for a user-input newline after the main command has finished. In this case, the command output will remain until you press Enter in the pane, and then it will automatically close.

  • Thanks Michawl Homer :-). I found it too just now/. But how keep the new window from closed? – atupal Aug 29 '14 at 8:03
  • @atupal: See edit - either set remain-on-exit or use cmd ; read. – Michael Homer Aug 29 '14 at 8:11
2

bash --rcfile

This technique opens a new shell, runs commands, and leaves you there after the commands finish:

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

Or if the command has no special terminal characters like ; just:

tmux-split-cmd ping google.com

This uses:

Another interesting variant is:

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

which kills the previous split if it already exists, and helps to keep only one extra split at all times.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.