如何使用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 2014年

Answers:


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“ Windows和窗格”部分)。请注意,顺序很重要-该命令必须在出现的任何上述选项之后执行,并且该命令必须是单个参数,因此,如果有空格,则需要用引号引起来。


对于这样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'

在这里,您可以使用shell read命令在main命令完成后等待用户输入的换行符。在这种情况下,命令输出将一直保留到您Enter在窗格中按之前,然后它会自动关闭。


感谢Michawl Homer :-)。我也刚刚发现它。但是如何避免关闭新窗口?
2014年

@atupal:请参阅编辑-设置remain-on-exit或使用cmd ; read
Michael Homer 2014年

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 "$@"
)

如果先前的分割已经存在,则会杀死该分割,并始终确保仅保留一个额外的分割。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.