Existe um equivalente tmux de "screen -D -R"


13

Gostaria de saber se existe uma maneira de se tmuxcomportar como, screen -D -Rpara que eu possa dizer, ter o comando como um comando padrão no Putty.

Essas screenopções forçariam a desanexação de uma sessão de tela existente para o meu usuário (mesmo se ela ainda estivesse ativa e conectada em outro lugar) e a anexariam novamente à sessão atual. Além disso, no caso de não existir uma sessão de tela, ela criaria uma nova.

Eu gosto do tmux e posso ver benefícios claros sobre a tela, mas a existência desse recurso realmente selaria o acordo.

tmux attach parece não criar uma nova sessão se não houver uma.

A página de manual do tmux diz:

Se nenhum servidor for iniciado, a sessão de conexão (conexão) tentará iniciá-lo; isso falhará, a menos que as sessões sejam criadas no arquivo de configuração.

O que significa a seção em negrito? (Não consigo encontrar um exemplo de criação de uma sessão no arquivo conf).


Na página do manual: " O arquivo de configuração é um conjunto de tmuxcomandos que são executados em sequência quando o servidor é iniciado pela primeira vez. " - você pode realmente ter attachou new-sessioncomo uma linha no seu .tmux.conf.
sr_ 5/03/12

@sr_ Bem, a quando o servidor é iniciado pela primeira vez new-sessionteria acontecido de qualquer maneira ...
Chris Baixo

Acabei de encontrar esta pergunta (fechada) no SO. Mesma pergunta com respostas semelhantes. stackoverflow.com/q/3432536/168034
phunehehe

Respostas:


15

Sim:

$ tmux attach -d || tmux new

-dé necessário se comportar como screen -D, por exemplo, desconectar todos os outros.

Conecte-se por ssh e, em seguida, anexar ou criar pode ser algo como:

$ cat bin/stmux
#!/bin/sh
exec ssh -t $@ 'tmux attach -d || tmux new'

$ stmux my.remote.box

1
Sim - esta parece ser a maneira mais eficaz de obter o que solicitei. Da mesma forma, desaprovo new-sessionno arquivo de configuração, caso você queira editá-lo e recarregá-lo durante uma sessão do tmux.
Geeb

4

Para tmux attachcriar uma nova sessão quando não houver uma, use a opção new-sessionno arquivo de configuração do tmux. Crie o arquivo ~/.tmux.confse ele não existir e adicione

new-session

para isso. Além disso, eu alias tmuxpara tmux attach:)


1
Eu prefiro não ter new-sessionem ~/.tmux.confporque se eu recarregar a configuração usando o comando source-file ~/.tmux.conf(ver este ) uma nova sessão será lançado. Sim, posso matá-lo e anexá-lo ao anterior, mas isso é um pouco chato.
mmoya 14/05

3

Você pode emular isso com uma função shell, isso deve funcionar para qualquer shell compatível com POSIX:

tmux() {
    if [ "$#" -ge 1 ] && [ "$1" = -z ]; then
        shift
        command tmux detach 2>/dev/null
        command tmux attach "$@" || command tmux new-session "$@"
    else
        command tmux "$@"
    fi
}

Agora, se você iniciá-lo como tmux -z, ele deve executar as ações que você está procurando.


2

este funciona um pouco melhor para mim:

tmux new-session -AD -s <session-name>

1

Acho que isso funciona melhor para mim em .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi

Como isso explica a seção em negrito no OP?
Anthon

0

Se você estiver usando isso dentro de um arquivo .shrc ou similar, execrecomendo

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.