Estou tentando descobrir como anexar a uma, tmux session
se existir uma sessão tmux nomeada; caso contrário, quero criar uma nova com o nome fornecido.
Atualmente, conheço alguns tmux
comandos que podem parcialmente alcançar o que estou procurando, mas não está claro como combiná-los para obter o que estou procurando:
tmux attach
anexa a uma sessão existente automaticamente - mas com erros se não existir nenhuma sessãotmux new
cria uma nova sessão - mas sempre o faz, por isso não posso deixá-la no meu.tmux.conf
tmux has-session
testa se existe uma sessão - mas não sei como costurá-la 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 precisar fazer logon em uma sessão.
Como posso escrever um script automático para criar uma nova sessão tmux (se um nome de sessão não existir) ou anexar a um nome de sessão (se existir)?
man tmux
diz: "A bandeira -A faz nova sessão se comportam como anexar-sessão se sessão-name já existe"Respostas:
Como alternativa, você pode adicionar
ao seu
.tmux.conf
- que criará uma sessão padrão na inicialização do servidor.Em seguida, ele
tmux attach
será anexado à sessão atual (servidor em execução, ou seja) ou criará uma nova sessão (iniciar o servidor, ler o arquivo de configuração, emitir onew-session
comando) e anexar a ela.fonte
new-session
destruir, parece ser um problema real.source-file ~/.tmux.conf
)-A
opçãonew-session
se nomear sua sessão.new-session -A -s mysession
jogará bem com o recarregamento da configuração.Eu percebi isso ( e ele apontou para mim ).
fonte
tmux attach-session -t my-session || tmux new-session -s my-session
. O único problema é que isso não é atômico. O tmux realmente deve ter um comando de criação ou conexão.alias tm='tmux attach || tmux new'
tmux attach -t some_name || tmux new -s some_name
. Mude some_name para $ 1 adicione um shebang e salve.new
vsnew-session
: eles são sinônimos, e por isso sãoattach
eattach-session
.tmux new-session -ds default \; split-window -dv 2>/dev/null; tmux attach -t default
funciona muito melhor e não abre um segundo tmux no caso de você ser/bin/kill
o primeiro. A única desvantagem é que você precisa nomear as sessões para isso.Como apontado nos comentários de Petr Viktorin , jkoelker e pjincz , você pode usar o seguinte comando para anexar
mySession
se ele existir, e criá-lo se não existir:De
man tmux
:new-session
suporta-A
desde tmux-1.8 .fonte
gnome-terminal
o comando, sugiro que deixe de lado o-s
nome da sessão e o nome específico da sessão para que você não acabe com TODAS as novasgnome-terminal
sessões anexadas à mesma sessão. Você sempre pode selecionar uma sessão existenteprefix + s
após abrir um novo terminal.Embora eu ache que a resposta de rampion é suficiente para usar 1 sessão, este script permite configurar várias sessões:
NOTA:
fonte
Adaptando a sugestão de Alex para incluir a configuração baseada em projeto na inicialização, comecei a usar o seguinte:
onde
tmux-myproject.conf
está minha série de inicialização dos comandos tmux para criar minhas janelas e painéis e iniciar meus editores.fonte
Eu uso um alias para criar uma nova sessão, se necessário, e anexo à minha sessão padrão, se ela já existir:
Adicionei isso ao meu .login no meu servidor.
O motivo de fazê-lo dessa maneira é porque não quero anexar à mesma sessão real, quero uma nova sessão que use o mesmo grupo de janelas.
Isso também é semelhante à execução
screen -xRR
.fonte
tmux list-sessions
.tmux new -A -s default
para iniciar uma nova sessão, se ela não existir, ou anexar automaticamente. Eu acho que é muito melhor do que editar o arquivo de configuração.Para quem quer fazer o mesmo em
fish
:fonte