Após consultar os assistentes do IRC, estou confiante de que não existe um único comando tmux que tenha esse comportamento. Felizmente, é bastante fácil emular usando o shell:
(tmux ls | grep -vq attached && tmux at) || tmux
O comando tmux attach
age mais como uma combinação de screen -r
e screen -x
- primeiro ele tenta anexar à sessão destacada mais recente e, se não houver nenhuma disponível, ela será anexar a uma sessão atualmente conectada. Desejo emular o comportamento de screen -R
: primeiro, tente anexar a uma sessão desanexada e inicie uma nova sessão, se não houver sessões desanexadas. Qual é a melhor maneira de conseguir isso no tmux?
Apesar do que diz no manual do tmux:
The target-session rules for attach-session are slightly
adjusted: if tmux needs to select the most recently used session,
it will prefer the most recently used unattached session.
A resposta de Drew não funcionará corretamente em uma situação como:
0: 1 windows (created Wed Nov 7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov 7 23:51:33 2012) [177x47] (attached)
tmux at
será anexado à última sessão (# 1) (mesmo que esta sessão ainda esteja anexada em outro lugar). Isso estraga toda a idéia de executar várias sessões tmux e anexar apenas a uma separada (para usar mosh + tmux + iterm2 para criar um terminal de roaming perfeito).
Outra abordagem seria selecionar manualmente uma sessão não anexada:
tmux ls | grep -vq attached && tmux at 'tmux ls | grep -vm1 attached | cut -d: -f1'
Eu costumo ter apenas duas sessões tmux de cada vez, então faço algo assim em cada janela de terminal.
janela do terminal 0:
tmux attach -t 0 || tmux new
janela do terminal 1:
tmux attach -t 1 || tmux new
Isso funcionou melhor para mim:
if [ -z "$TMUX" ]; then
(tmux ls | grep -vq attached && tmux at -t 'tmux ls | grep -vm1 attached | cut -d: -f1') || tmux new
fi
O -t é necessário para anexar à sessão correta.
E sobre
tmux attach || tmux new
ou apenas crie o arquivo ~/.tmux.conf
se ele não existir e adicione
new-session
para que crie uma nova sessão quando não houver nenhuma quando você executar tmux attach
.
Também pode ser útil tornar tmux
um alias em tmux attach
.
Tags tmux