Estou escrevendo um script de shell que cria / anexa ou alterna para uma determinada sessão, dependendo se alguém está dentro do tmux e se a sessão existe.
Eu tenho tudo funcionando perfeitamente, exceto para o caso de exigir a criação de uma nova sessão tmux de dentro de uma sessão tmux.
Quando meu script é executado tmux new-session -s name
, obtenho a seguinte saída:
as sessões devem ser aninhadas com cuidado, desative $ TMUX para forçar
Na verdade, não quero aninhar sessões, meu objetivo é criar outra sessão separada e alternar para ela de dentro de uma sessão tmux .
Isso é possível?
Respostas:
A maneira mais rápida (supondo que você use
ctrl-b
como prefixo de comando) é:Para criar uma nova sessão, então
para selecionar e anexar interativamente à sessão.
fonte
ctrl-b $
Ctrl-b :new -s <name>
para dar um nome à nova sessão.Como criar o script
Este script verificará se existe uma sessão. Se a sessão não existir, crie uma nova sessão e anexe a ela. Se a sessão não existe nada acontece e nós anexamos a essa sessão. Sinta-se à vontade para substituir `~ / development 'pelo nome do projeto.
$ touch ~/development && chmod +x ~/development
Nova sessão do terminal
Vamos criar duas sessões separadas, listá-las, anexar a uma e então, de dentro do tmux, percorrer as sessões.
tmux new -s name -d
funciona de dentro do tmux porque estamos criando uma nova sessão separada. Caso contrário, você obterá um erro de aninhamento.Nova sessão de dentro do tmux
Agora estamos dentro ou mais conhecidos como anexados à nossa sessão de destino. Se tentarmos criar uma nova sessão enquanto anexada, isso resultará em um erro de aninhamento.
Para resolver isso, criamos uma nova sessão separada. por exemplo,
Ciclo (troca) de sessões
Prefix
(
sessão anteriorPrefix
)
próxima sessãonota:
Prefix
éCtrl-b
por padrão. Você pode ligarPrefix
paraCtrl-a
e no Mac OSX você pode mudar a tecla Caps Lock para ctrlsystem preferences > keyboard > modifier keys
Anexe a uma sessão usando o modo de comando enquanto estiver dentro do tmux
Tentar conectar a uma sessão sem desconectar resultará em erro.
Em vez disso, use o modo de comando
Prefix
:
, digiteattach -t session_name
e pressione Enter.fonte
Usar isso funciona para mim:
O
TMUX=
na primeira linha é necessário para que o tmux não gere umasessions should be nested with care, unset $TMUX to force
mensagem.fonte
TMUX=`tmux new-session -d -s name`
Todos os comandos que você pode lançar em seu terminal, como
tmux new -s sessionName
podem ser iniciados de dentrotmux
, pressionando a tecla de gatilho (por exemploctrl-b
:) e:
depois o comando sem atmux
parte inicial .Como resultado,
ctrl-b :
seguido denew -s sessionName
fará exatamente o que você deseja e dará um nome à sua sessão. Ele também muda automaticamente para a nova sessão.fonte
Você pode tentar
unset TMUX
primeiro, isso funciona para mim.fonte
seguindo o conselho do usuário2354696, eu uso as seguintes combinações de teclas para criar uma nova sessão ou "clonar" uma sessão existente
fonte