tmux-Skript zum Starten mehrerer Befehle

tmux-Skript zum Starten mehrerer Befehle

Wie kann ich Folgendes in ein Bash-Skript schreiben?

tmux # Start tmux session.
compass watch /path/to/project1/compass/ # Run the first process.
Ctrl + B, " # Split the pane.
compass watch /path/to/project2/compass/ # Run the second process.
Ctrl + B, D # Exit the session.

Antwort1

tmux \
    new-session  'compass watch /path/to/project1/compass/' \; \
    split-window 'compass watch /path/to/project2/compass/' \; \
    detach-client

Der new-sessionBefehl (der eine neue tmuxSitzung erstellt) und der split-windowBefehl (der das aktuelle Fenster in zwei Bereiche aufteilt) tmuxerfordern optionale Shell-Befehle zur Ausführung. Das detach-clientführt am Ende das Offensichtliche aus.

Wenn Sie eine horizontale Teilung (zwei Bereiche nebeneinander) wünschen, verwenden Sie split-window -hden obigen Befehl.

Wenn Sie mehrere tmuxBefehle an senden tmux, müssen Sie diese durch trennen ;. Das ;muss vor der Shell durch Anführungszeichen/Escapezeichen ( ';', ";"oder \;) geschützt werden, um zu verhindern, dass die Shell es als Befehlsende interpretiert tmux.

Ich habe das Ganze der Lesbarkeit halber in einzelne Zeilen aufgeteilt. Wenn Sie dies in einem Skript tun (was ich empfehle), stellen Sie sicher, dass \in jeder Zeile nach dem Finale nichts mehr steht.

tmux aStellen Sie mit , tmux attachoder die Verbindung zur Sitzung wieder her tmux attach-session(diese sind alle gleichwertig).

Die tmuxSitzung wird beendet, sobald die Ausführung beider Befehle abgeschlossen ist.

Antwort2

Das hat bei mir nicht funktioniert (ich habe versucht, etwas wie 'ls -la' zu machen). Was funktioniert hat, war:

tmux new-session -d bash
tmux split-window -h bash
#sends keys to first and second terminals
tmux send -t 0:0.0 "<my-first-command>" C-m
tmux send -t 0:0.1 "<my-second-command>" C-m
tmux -2 attach-session -d

Dadurch konnte ich ziemlich generische Sachen ausführen und obwohl es hässlich aussieht, ist es ziemlich funktional.

Ich lasse es einfach hier, für den Fall, dass andere Leute nach dem Gleichen suchen.

Quelle:https://gist.github.com/kizzx2/4739236

Antwort3

So führen Sie einen kurzen Befehl aus, ohne ihn am Ende zu beenden:

tmux \
    new-session  'ls ; bash' \; \
    split-window 'ls ; bash' 

oder

tmux \
    new-session  'ls ; bash' \; \
    new-window   'ls ; bash' 

verwandte Informationen