Wie teile ich ein neues Fenster und führe einen Befehl in diesem neuen Fenster mit tmux aus?

28

Ich habe versucht

tmux -c "shell command" split-window

aber es scheint nicht zu funktionieren.

Mit tmux split-windowkann man ein neues Fenster teilen.

UPDATE :

Mit tmux split-window 'exec ping g.cn'kann der Befehl ping ausgeführt werden, aber wenn er angehalten wird, wird das neue Fenster geschlossen.

atupal
quelle
4
man tmux | less -p remain-on-exit...
Jasonwryan

Antworten:

38

Verwenden:

tmux split-window "shell command"

Der split-windowBefehl hat die folgende Syntax:

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

(ab man tmux, Abschnitt "Windows und Fenster"). Beachten Sie, dass die Reihenfolge wichtig ist - der Befehl muss nach einer der vorhergehenden Optionen stehen, und es muss sich um ein einzelnes Argument handeln, sodass Sie es in Anführungszeichen setzen müssen, wenn es Leerzeichen enthält.


Für Befehle wie diesen ping -c, die schnell enden, können Sie remain-on-exitzuerst die Option setzen:

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

Der Bereich bleibt nach pingAbschluss des Vorgangs geöffnet , wird jedoch als "tot" markiert, bis Sie ihn manuell schließen.

Wenn Sie die allgemeinen Optionen nicht ändern möchten, gibt es einen anderen Ansatz. Der Befehl wird mit ausgeführt sh -c, und Sie können dies ausnutzen, um das Fenster am Ende am Leben zu erhalten:

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

Hier verwenden Sie den Shell- readBefehl, um nach Beendigung des Hauptbefehls auf eine vom Benutzer eingegebene neue Zeile zu warten. In diesem Fall bleibt die Befehlsausgabe so lange bestehen, bis Sie im Bereich auf drücken Enter, und wird dann automatisch geschlossen.

Michael Homer
quelle
Danke Michawl Homer :-). Ich habe es auch gerade gefunden. Aber wie kann man verhindern, dass das neue Fenster geschlossen wird?
atupal
@atupal: Siehe Bearbeiten - entweder einstellen remain-on-exitoder verwenden cmd ; read.
Michael Homer
2

bash --rcfile

Diese Technik öffnet eine neue Shell, führt Befehle aus und lässt Sie dort, nachdem die Befehle beendet wurden:

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

Oder wenn der Befehl keine speziellen Terminalzeichen enthält, wie zum Beispiel ;:

tmux-split-cmd ping google.com

Dies verwendet:

Eine weitere interessante Variante ist:

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

Dadurch wird der vorherige Split gelöscht, sofern er bereits vorhanden ist, und es wird immer nur ein zusätzlicher Split beibehalten.

Ciro Santilli ist ein Schauspieler
quelle