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-session
Befehl (der eine neue tmux
Sitzung erstellt) und der split-window
Befehl (der das aktuelle Fenster in zwei Bereiche aufteilt) tmux
erfordern optionale Shell-Befehle zur Ausführung. Das detach-client
führt am Ende das Offensichtliche aus.
Wenn Sie eine horizontale Teilung (zwei Bereiche nebeneinander) wünschen, verwenden Sie split-window -h
den obigen Befehl.
Wenn Sie mehrere tmux
Befehle 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 a
Stellen Sie mit , tmux attach
oder die Verbindung zur Sitzung wieder her tmux attach-session
(diese sind alle gleichwertig).
Die tmux
Sitzung 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.
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'