Anexe à sessão do tmux e execute um comando

6

Como posso executar um comando no Tmux quando estou anexando a uma sessão?

Eu quero anexar e imediatamente executar um comando.

Eu li os documentos, mas encontrei apenas chaves de envio, o que não atende às minhas necessidades.

    
por astropanic 15.08.2013 / 10:14

6 respostas

9

Você pode anexar a uma sessão tmux em execução e gerar uma nova janela que executa um comando específico:

tmux attach \; new-window vim

Note que isso não gera vim na janela de pré-dispensa - não há nenhuma facilidade para fazer isso, realmente não faz sentido: como @Falcon Momot aponta, uma janela existente poderia estar executando qualquer coisa, a única maneira de emitir comandos é "enviar chaves".

    
por 15.08.2013 / 10:50
2

Tente isso para executar o mutt, por exemplo

tmux has-session -t mail
if [ $? != 0 ]
then
tmux new-session -s mail -n mel_GMAIL -d "TERM=xterm-256color ; mutt -F $HOME/.mutt/muttrc_perso"
fi
lxterminal --command="tmux attach -t mail"

Verifica a existência de uma sessão de 'mail' em execução, caso contrário, cria uma e inicia a aplicação mutt; finalmente, atribui a ele

    
por 25.11.2013 / 17:17
2

Eu estava procurando uma solução para esse problema exato. Isso pode ser feito usando os comandos 'set-buffer' e 'paste-buffer'

tmux att -t <session-name> \; set-buffer "<command>^M" \; paste-buffer

Aqui está um exemplo completo:

# let's start with two sessions running bash
tmux new -s theOtherSession \; detach
tmux new -s astropanic \; rename-window main-window \; detach

# attach to the 'astropanic' session, run a directory listing, output
# current datetime, then detach. Note for carriage return (^M) type ^V^M
tmux att -t astropanic \; find-window main-window \; set-buffer "ls;date^M" \; paste-buffer \; detach

# reconnect to check status
tmux att -t astropanic
    
por 27.06.2015 / 11:06
1

Não está claro para mim que tipo de comando você deseja executar, um comando do tmux ou um comando do shell / OS. Aqui está um exemplo de cada um:

#!/bin/bash

cd

# give the session a name; makes it easier to reuse code lines
_SNAME=Generic

# start a whole new tmux session
tmux new-session -s $_SNAME -d -x 140 -y 35

# can set tmux options
tmux set-option -t $_SNAME default-path /opt/foo/build

# create a new window that's just a shell
tmux new-window -t $_SNAME -n build -d

# create a new window that's running a program
tmux new-window -t $_SNAME -n vim -d vim

Isso deixa a sessão desanexada. Se você deseja anexar também, adicione esta linha no final do shell script:

# attach to the new session
tmux attach -t $_SNAME
    
por 17.08.2013 / 06:06
0

Eu gosto de fazer isso:

#!/bin/bash

function tmuxed {
    /usr/local/bin/tmux new-session -d -s bkp 2&>/dev/null
    /usr/local/bin/tmux send-keys "/Users/xxx/bin/thisscript backup" C-m
}

function backup {
    echo 'bla bla doing stuff'
}

$1

E execute /Users/xxx/bin/thisscript tmuxed

    
por 22.07.2015 / 22:41
0

Aqui está um pequeno script que inicia ou anexa ao Tmux e executa um comando nele. Quando o comando for executado, ele sairá do Tmux.

#!/bin/sh -x
SESSION_NAME=foo

tmux has-session -t $SESSION_NAME 2>/dev/null
if [ $? -ne 0 ]
then
  tmux new-session -d -s $SESSION_NAME "$*"
fi
exec tmux attach -t $SESSION_NAME

Exemplo de uso:

$ ./script-above 'echo hello world && sleep 10'
    
por 28.09.2016 / 09:26

Tags