tmux equivalente a “screen -R”?

9

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?

    
por Drew Frank 13.10.2012 / 21:31

5 respostas

12

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
    
por 13.10.2012 / 23:03
3

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'

    
por 08.11.2012 / 01:52
2

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
    
por 08.12.2012 / 19:04
2

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.

    
por 16.01.2014 / 04:18
1

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 .

    
por 13.10.2012 / 23:22

Tags