it-swarm.com.de

So erstellen Sie eine neue tmux-Sitzung, wenn keine vorhanden ist

Ich versuche herauszufinden, wie ich eine Verbindung zu einem tmux session herstellen kann, wenn eine benannte tmux-Sitzung existiert, andernfalls möchte ich eine neue mit dem angegebenen Namen erstellen.

Momentan kenne ich einige tmux-Befehle, die zum Teil erreichen können, wonach ich suche, aber es ist nicht klar, wie man sie kombiniert, um das zu bekommen, was ich suche:

  • tmux attach wird an eine automatisch vorhandene Sitzung angehängt - es werden jedoch Fehler ausgegeben, wenn keine Sitzung vorhanden ist
  • tmux new erstellt eine neue Sitzung - dies jedoch jedes Mal, sodass ich sie nicht in meinem .tmux.conf belassen kann.
  • tmux has-session prüft, ob eine Sitzung existiert - aber ich weiß nicht, wie sie mit den anderen Befehlen zusammengefügt werden soll

Daher möchte ich ein tmux-Skript erstellen, sodass dies automatisch geschieht, anstatt es jedes Mal manuell erstellen zu müssen, wenn ich mich in eine Sitzung einloggen muss. 

Wie kann ich ein automatisches Skript schreiben, um eine neue tmux-Sitzung zu erstellen (wenn ein bestimmter Sitzungsname nicht vorhanden ist) oder eine Verbindung zu einem Sitzungsnamen herzustellen (falls vorhanden)?

120
rampion

Alternativ können Sie hinzufügen

new-session

zu Ihrem .tmux.conf - Dadurch wird beim Start des Servers eine Standardsitzung erstellt.

Dann wird tmux attach entweder mit der aktuellen Sitzung verbunden (dh der Server wird ausgeführt), oder eine neue Sitzung erstellen (Server starten, Konfigurationsdatei lesen, Befehl new-session ausgeben) und an diese anhängen.

87
Leonid Shevtsov

Ich habe es herausgefunden ( und hatte es mir gezeigt ). 

tmux attach || tmux new
152
rampion

Wie in Kommentaren von Petr Viktorin , jkoelker und pjincz ausgeführt, können Sie den folgenden Befehl verwenden, um ihn an mySession anzuhängen, falls vorhanden, und, falls vorhanden, zu erstellen es tut nicht:

 tmux new -A -s mySession

Von man tmux :

new-session[-AdDEP] [-cstart-directory] [-Fformat] [-nwindow-name] [-ssession-name] [-tgroup-name] [-xwidth] [-yheight] [Shell-command]

(Alias: new)

Erstellen Sie eine neue Sitzung mit dem Namen session-name.

[...]

Das -A-Flag bewirkt, dass new-session sich wie attach-session verhält, wenn session-name bereits vorhanden ist. In diesem Fall verhält sich -D wie -d zu attach-session.

new-session unterstützt -A seit tmux-1.8 .

30
alpha_989

Als ich Alex 'Vorschlag anpasste, beim Start die projektbasierte Konfiguration zu berücksichtigen, begann ich Folgendes zu verwenden:

# ~/bin/tmux-myproject Shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"

tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
    echo "No Session found.  Creating and configuring."
    pushd $PROJECT_DIR
    tmux new-session -d -s $PROJECT_NAME
    tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
    popd
else
    echo "Session found.  Connecting."
fi
tmux attach-session -t $PROJECT_NAME

dabei ist tmux-myproject.conf meine Startserie von tmux-Befehlen zum Erstellen von Fenstern und Fenstern sowie zum Starten meiner Editoren.

13
Anm

Ich finde, dass die Antwort von rampion für die Verwendung einer Sitzung ausreicht. Mit diesem Skript können Sie jedoch mehrere Sitzungen einrichten:

SESSIONS="work play"

function has-session {
    tmux has-session -t $1 2>/dev/null
}

function except 
{
    if [ "$?" -eq 1 ] ; then
        $1
    fi
}

# Configure your sessions here
function session-work
{
    tmux new-session -d -s work
    tmux neww -k -t work:1
}

function session-play
{
    tmux new-session -d -s play
    tmux neww -k -t play:1
}

#
#MAIN 
for x in $SESSIONS
do
    echo $x
    has-session $x
    except session-$x
done

HINWEIS:

-k  --> new-window will not be created if already exists
-d  --> start session or window, but don't attach to it yet
-s  --> name the session
-t  --> specify a target location in the form session:window.pane 
13
Alex Gaudio

Ich benutze einen Alias, um eine neue Sitzung zu erstellen, falls erforderlich, und füge eine Verbindung zu meiner Standardsitzung hinzu, falls diese bereits vorhanden ist:

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

Ich habe dies zu meinem .login auf meinem Server hinzugefügt.

Der Grund, warum ich es so mache, ist, dass ich nicht an dieselbe Sitzung anschließen möchte, sondern eine neue Sitzung, die dieselbe Gruppe von Fenstern verwendet.

Dies ähnelt auch dem Ausführen von screen -xRR.

8
Michael

Für diejenigen, die dasselbe in fish tun wollen:

tmux attach -t mysesh; or tmux new -s mysesh
0
tinyspark