Como criar uma nova sessão do TMux se não existir
-
26-09-2019 - |
Pergunta
Estou tentando descobrir como anexar a um tmux session
Se existir uma sessão de tmux nomeada, se não, eu quero criar um novo com o nome fornecido.
Atualmente, eu conheço alguns tmux
Comandos que podem alcançar parcialmente o que estou procurando, mas não está claro como combiná -los para conseguir o que estou procurando:
tmux attach
Anexa a uma sessão existente automaticamente - mas erros se não houver sessãotmux new
cria uma nova sessão - mas o faz sempre, então não posso deixar isso no meu.tmux.conf
tmux has-session
Testes se existe uma sessão - mas não sei como costurar com os outros comandos
Assim, eu gostaria de criar um script TMUX, para que isso aconteça automaticamente, em vez de ter que criá -lo manualmente toda vez que preciso fazer login em sessões.
Como posso escrever um script automático para criar uma nova sessão do TMUX (se um determinado nome da sessão não existir) ou anexar a um nome de sessão (se existir)?
Solução
Como alternativa, você pode adicionar
new-session
para o seu .tmux.conf
- Isso criará uma sessão padrão no servidor Iniciar.
Então tmux attach
será anexado à sessão atual (em execução, ou seja) ou criará uma nova sessão (inicie o servidor, leia o arquivo de configuração, emitir o new-session
comando) e anexe a isso.
Outras dicas
Eu descobri (e tinha apontado para mim).
tmux attach || tmux new
Como apontado nos comentários de Petr Viktorin, Jkoelker e pjincz, você pode usar o seguinte comando para anexar mySession
Se existir, e para criá -lo se não for:
tmux new -A -s mySession
A partir de 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
)Crie uma nova sessão com nome
session-name
.[...]
o
-A
bandeira faznew-session
Comportar-se comoattach-session
E sesession-name
já existe; nesse caso,-D
se comporta como-d
paraattach-session
.
Embora eu ache que a resposta de Rampion é suficiente para usar 1 sessão, este script permite configurar várias sessões:
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
Adaptando a sugestão de Alex para incluir a configuração baseada no projeto na startup, comecei a usar o seguinte:
# ~/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
Onde tmux-myproject.conf
são minha série de startups de comandos tmux para criar minhas janelas e painéis, além de iniciar meus editores.
Eu uso um alias para criar uma nova sessão, se necessário, e anexo à minha sessão padrão se já existir:
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
Eu adicionei isso ao meu .Login no meu servidor.
A razão pela qual faço dessa maneira é porque não quero anexar à mesma sessão real, quero uma nova sessão que use o mesmo grupo de Windows.
Isso também é semelhante a correr screen -xRR
.
Para aqueles que querem fazer a mesma coisa em fish
:
tmux attach -t mysesh; or tmux new -s mysesh