Tmux - Executa o comando na sessão na inicialização

3

O que eu quero fazer é muito simples, mas não consigo encontrar uma resposta direta.

Eu encontrei esta pergunta e esta pergunta , mas eles não são exatamente o que eu preciso - eu não estou executando várias sessões ou janelas ou qualquer coisa maluca assim - eu só quero que o tmux execute um comando (provavelmente um script bash) em si mesmo, depois que ele for aberto.

Então basicamente eu digito "tmux", uma sessão é aberta, e dentro da sessão o tmux executa automaticamente "hello_world.sh", ou algo similar.

Alguém sabe como fazer isso? O arquivo .tmux.conf não parece ter "send-keys", mas eu posso estar usando errado.

Obrigado a todos antecipadamente.

Edit: Respondeu minha pergunta graças ao JohnKiller. Eu não pensei sobre o fato de que o /root/.bashrc é executado no log in, e quando o TMUX é aberto. Eu adicionei uma declaração if, responda abaixo.

    
por Locane 12.01.2015 / 04:44

2 respostas

5

Graças à sugestão de JohnKiller, percebi que .bashrc executa ambos quando um novo tty é aberto e quando o TMUX é aberto em um terminal.

Para futuros leitores: A variável $ TMUX é normalmente referenciada para ver se o TMUX está sendo executado, mas você também pode usar o "pidof tmux". A variável $ TMUX será preenchida com algo como: "/ tmp / tmux-0 / default, 27389,0" se o TMUX estiver sendo executado.

No meu caso particular, eu estou rodando o CentOS 6, e ele está configurado para login automático com root, já que é apenas uma imagem de teste. Eu consegui fazer isso editando o /etc/init/tty.conf:

exec /bin/mingetty --autologin root $TTY

Agora que está definido para login automático, adicionei o seguinte ao /root/.bashrc:

if [[ 'tty' == "/dev/tty1" ]] && [[ -z "$TMUX" ]];then
        tmux
fi

Para iniciantes lendo isto, isso diz "Se meu terminal for terminal 1 e a variável $ TMUX for de tamanho zero, execute o tmux".

É seguido por:

if [[ -n "$TMUX" ]] && [[ ! -e "/root/.automatic_start_occurred" ]];then
        touch /root/.automatic_start_occurred
        /usr/bin/hello_world
fi

Novamente para iniciantes, isso diz "Se $ TMUX tiver comprimento diferente de zero, e o arquivo" .automatic_start_occurred "não existir (o"! "na instrução if), faça o arquivo" /root/.automatic_start_occurred "e então execute" hello_world "em / usr / bin.

Isso é exatamente o que eu estava procurando que meu sistema fizesse - Após a inicialização, o TTY1 irá aparecer com o TMUX, e os outros TTYs serão deixados em paz. Quando o TMUX aparece pela primeira vez, ele executa alguns comandos arbitrários e nunca os executa novamente, a menos que o arquivo ".automatic_startup_occurred" seja removido.

    
por 13.01.2015 / 00:23
0

link

Edite ~/.bashrc e adicione:

if [ -z "$TMUX" ]; then
    YOUR CODE HERE
fi 
    
por 12.01.2015 / 08:41

Tags