Esiste un equivalente tmux di "schermo -D -R"


13

Vorrei sapere se esiste un modo per tmuxcomportarsi in screen -D -Rmodo da poter dire, avere il comando come comando predefinito in Putty.

Questi screeninterruttori importerebbero il distacco di una sessione dello schermo esistente per il mio utente (anche se era ancora attiva e il login da qualche altra parte) e lo ricollegavano alla sessione corrente. Inoltre, nel caso in cui non esistesse alcuna sessione su schermo, ne creerebbe una nuova.

Mi piace tmux e posso vedere chiari benefici sullo schermo, ma l'esistenza di questa funzione sigillerebbe davvero l'affare.

tmux attach non sembra creare una nuova sessione se non ce n'è una.

La pagina man di tmux dice:

Se non viene avviato alcun server, attach-session (attach) tenterà di avviarlo; ciò fallirà a meno che non vengano create sessioni nel file di configurazione.

Cosa significa la sezione in grassetto? (Non riesco a trovare un esempio di creazione di una sessione nel file conf).


Dalla pagina man: " Il file di configurazione è un insieme di tmuxcomandi che vengono eseguiti in sequenza al primo avvio del server. " - Potresti effettivamente avere attacho new-sessioncome linea nel tuo .tmux.conf.
sr_

@sr_ Beh, il primo avvio del server new-sessionsarebbe comunque successo ...
Chris Down

Ho appena trovato questa domanda (chiusa) su SO. Stessa domanda con risposte simili. stackoverflow.com/q/3432536/168034
phunehehe

Risposte:


15

Sì:

$ tmux attach -d || tmux new

-dè necessario comportarsi come screen -D, cioè, staccare tutti gli altri.

Connettiti tramite ssh, quindi collegare o creare potrebbe essere qualcosa di simile:

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

$ stmux my.remote.box

1
Sì, questo sembra essere il modo più efficace per ottenere ciò che ho richiesto. Allo stesso modo, non approvo new-sessionil file di configurazione nel caso in cui si desideri modificarlo e ricaricarlo durante una sessione di tmux.
Accidenti

4

Per tmux attachcreare una nuova sessione quando non ce n'è una, usa l'opzione new-sessionnel file tmux config. Crea il file ~/.tmux.confse non esiste e aggiungi

new-session

ad esso. Inoltre, ho alias tmuxa tmux attach:)


1
Io preferisco non avere new-sessiona ~/.tmux.conf, perché se ricarico la configurazione utilizzando il comando source-file ~/.tmux.conf(vedi questo ) sarà lanciata una nuova sessione. Sì, posso ucciderlo e quindi collegarlo al precedente ma è un po 'fastidioso.
mmoya,

3

Puoi emularlo con una funzione di shell, questo dovrebbe funzionare per qualsiasi shell conforme a 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
}

Ora se lo avvii come tmux -z, dovrebbe eseguire le azioni che stai cercando.


2

questo funziona un po 'meglio per me:

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

1

Trovo che funzioni meglio per me su .bashrc

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

In che modo questo spiega la sezione in grassetto nel PO?
Anthon,

0

Se lo stai usando all'interno di un file .shrc o simile con execlo consiglierei

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.