Pergunta

Estou tentando descobrir como anexar a um tmux session Se existir uma sessão de tmux nomeada, se não, eu quero criar um novo com o nome fornecido.

Atualmente, eu conheço alguns tmux Comandos que podem alcançar parcialmente o que estou procurando, mas não está claro como combiná -los para conseguir o que estou procurando:

  • tmux attach Anexa a uma sessão existente automaticamente - mas erros se não houver sessão
  • tmux new cria uma nova sessão - mas o faz sempre, então não posso deixar isso no meu .tmux.conf
  • tmux has-session Testes se existe uma sessão - mas não sei como costurar 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 preciso fazer login em sessões.

Como posso escrever um script automático para criar uma nova sessão do TMUX (se um determinado nome da sessão não existir) ou anexar a um nome de sessão (se existir)?

Foi útil?

Solução

Como alternativa, você pode adicionar

new-session

para o seu .tmux.conf - Isso criará uma sessão padrão no servidor Iniciar.

Então tmux attach será anexado à sessão atual (em execução, ou seja) ou criará uma nova sessão (inicie o servidor, leia o arquivo de configuração, emitir o new-session comando) e anexe a isso.

Outras dicas

Eu descobri (e tinha apontado para mim).

tmux attach || tmux new

Como apontado nos comentários de Petr Viktorin, Jkoelker e pjincz, você pode usar o seguinte comando para anexar mySession Se existir, e para criá -lo se não for:

 tmux new -A -s mySession

A partir de man tmux:

new-session[-AdDEP] [-cstart-directory] [-Fformat] [-nwindow-name] [-ssession-name] [-tgroup-name] [-xwidth] [-yheight] [shell-command]

(Alias: new)

Crie uma nova sessão com nome session-name.

[...]

o -A bandeira faz new-session Comportar-se como attach-session E se session-name já existe; nesse caso, -D se comporta como -d para attach-session.

new-session apoiou -A Desde o tmux-1.8.

Embora eu ache que a resposta de Rampion é suficiente para usar 1 sessão, este script permite configurar várias sessões:

SESSIONS="work play"

function has-session {
    tmux has-session -t $1 2>/dev/null
}

function except 
{
    if [ "$?" -eq 1 ] ; then
        $1
    fi
}

# Configure your sessions here
function session-work
{
    tmux new-session -d -s work
    tmux neww -k -t work:1
}

function session-play
{
    tmux new-session -d -s play
    tmux neww -k -t play:1
}

#
#MAIN 
for x in $SESSIONS
do
    echo $x
    has-session $x
    except session-$x
done

NOTA:

-k  --> new-window will not be created if already exists
-d  --> start session or window, but don't attach to it yet
-s  --> name the session
-t  --> specify a target location in the form session:window.pane 

Adaptando a sugestão de Alex para incluir a configuração baseada no projeto na startup, comecei a usar o seguinte:

# ~/bin/tmux-myproject shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"

tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
    echo "No Session found.  Creating and configuring."
    pushd $PROJECT_DIR
    tmux new-session -d -s $PROJECT_NAME
    tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
    popd
else
    echo "Session found.  Connecting."
fi
tmux attach-session -t $PROJECT_NAME

Onde tmux-myproject.conf são minha série de startups de comandos tmux para criar minhas janelas e painéis, além de iniciar meus editores.

Eu uso um alias para criar uma nova sessão, se necessário, e anexo à minha sessão padrão se já existir:

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

Eu adicionei isso ao meu .Login no meu servidor.

A razão pela qual faço dessa maneira é porque não quero anexar à mesma sessão real, quero uma nova sessão que use o mesmo grupo de Windows.

Isso também é semelhante a correr screen -xRR.

Para aqueles que querem fazer a mesma coisa em fish:

tmux attach -t mysesh; or tmux new -s mysesh
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top