Come creare nuova sessione tmux se non esiste
-
26-09-2019 - |
Domanda
Sto cercando di capire come collegare ad un tmux session
se esiste una sessione di tmux di nome, se non voglio creare uno nuovo con il nome dato.
Al momento, so di alcuni comandi tmux
che può in parte realizzare ciò che sto cercando, ma non è chiaro come combinarli insieme per ottenere quello che sto cercando:
- attribuisce
tmux attach
a una sessione automaticamente esistente - ma gli errori se nessuna sessione esiste -
tmux new
crea una nuova sessione - ma lo fa ogni volta, quindi non posso lasciarlo nel mio.tmux.conf
- test
tmux has-session
se esiste una sessione - ma non so come cucire insieme con gli altri comandi
Quindi, vorrei creare uno script tmux, in modo che questo avviene automaticamente, invece di dover creare manualmente ogni volta che ho bisogno di accedere a un sessioni.
Come faccio a scrivere uno script automatico in modo da creare una nuova sessione tmux (se una determinata sessione di esistere nome pretende molto) o allegare a un nome di sessione (se esiste)?
Soluzione
In alternativa, è possibile aggiungere
new-session
al vostro .tmux.conf
-. Che creerà una sessione di default all'avvio del server
Poi tmux attach
sarà o allegare alla sessione corrente (in esecuzione del server, che è), o creare una nuova sessione (avviare il server, leggere il file di configurazione, eseguire il comando new-session
) e allegare a questo.
Altri suggerimenti
ho capito ( e se fosse fatto notare a me ).
tmux attach || tmux new
Come sottolineato nei commenti da Petr Viktorin , jkoelker e pjincz , è possibile utilizzare il seguente comando per connettersi a mySession
se esiste, e per creare, se non lo fa:
tmux new -A -s mySession
man tmux
:
new-session
[-AdDEP] [-c
start-directory
] [-F
format
] [-n
window-name
] [-s
session-name
] [-t
group-name
] [-x
width
] [-y
height
] [
shell-command
]
(alias:
new
)Crea una nuova sessione con il nome
session-name
.[...]
Le marche
-A
bandieranew-session
si comportano comeattach-session
sesession-name
già esiste; in questo caso, si comporta come-D
-d
aattach-session
.
Anche se trovo la risposta di rampion è sufficiente per l'utilizzo di 1 seduta, questo script consente di sessioni multiple di configurazione:
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
NOTA:
-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
Il suggerimento di Adattamento Alex per includere la configurazione base del progetto all'avvio, ho iniziato ad usare il seguente:
# ~/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
dove tmux-myproject.conf
è la mia serie di avvio del tmux comandi per creare le mie finestre e vetri, così come iniziare i miei editori.
Io uso un alias per creare una nuova sessione, se necessario, e allegare alla mia sessione predefinita se esiste già:
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
ho aggiunto questo al mio .login sul mio server.
Il motivo per cui lo faccio in questo modo è perché non voglio allegare alla stessa sessione attuale, voglio una nuova sessione che utilizza lo stesso gruppo di finestre.
Questo è anche simile a correre screen -xRR
.
Per coloro che vogliono fare la stessa cosa in fish
:
tmux attach -t mysesh; or tmux new -s mysesh