Como executar código em uma nova sessão do tmux - a partir da sessão atual?

6

Eu uso o Ubuntu 16.04 e preciso da seguinte solução de tmux porque quero executar um processo de tempo limite com sleep , pois no meu caso particular eu não estava satisfeito com at e encontrei um bug com nohup (ao combinar nohup-sleep ). Agora, tmux parece ser a melhor alternativa, pois tem seu próprio mecanismo no-hangup e está funcionando bem no uso manual (eu faço a pergunta apenas no que diz respeito a automatizar o processo que já posso fazer manualmente com ele).

O que eu preciso:

Eu preciso de uma maneira de fazer as 3 ações a seguir, tudo em uma operação:

  1. Anexando uma nova sessão tmux .
  2. Injetando um conjunto pronto de comandos para essa sessão, como (sleep 30m ; rm -rf dir_name ; exit) . Eu preferiria especialmente um conjunto de várias linhas, e não uma linha longa.
  3. Execução do comando acima definido no momento em que foi concluído para ser gravado como stdin na nova tmux sessão.

Em outras palavras, quero executar um conjunto de códigos em outra sessão tmux que foi criada especialmente para essa causa, mas para fazer tudo em uma operação.

Notas:

  • Eu pretendo fazer tudo da minha sessão de trabalho original (aquela em que trabalho na maioria das vezes). Geralmente, não tenho intenção de visitar a sessão recém-criada, apenas quero criá-la com seu código executado automaticamente e pronto.

  • Se possível, eu preferiria uma solução heredoc. Eu acho que é mais eficiente.

por JohnDoea 05.01.2017 / 15:43

2 respostas

10

Se você colocar o código que deseja executar, por exemplo, /opt/my_script.sh , é muito fácil fazer o que você quer:

tmux new-session -d -s "myTempSession" /opt/my_script.sh

Isso inicia uma nova sessão desanexada, chamada "myTempSession", executando seu script. Mais tarde você pode anexar a ele para verificar o que está fazendo, executando tmux attach-session -t myTempSession .

Essa é, na minha opinião, a solução mais direta e elegante. Eu não estou ciente de qualquer maneira fácil de executar comandos de stdin (leia "de heredocs") com tmux. Ao invadir você pode até ser capaz de fazer isso, mas ainda assim seria (e pareceria) um hack.

Por exemplo, aqui está um hack que usa o comando i sugerido acima para simular o comportamento que você quer (= executar código em uma nova sessão tmux de um heredoc. Nenhuma gravação ocorre no disco rígido do servidor, quando o arquivo temporário é criado /dev/shm , que é um tmpfs):

(
  cat >/dev/shm/my_script.sh &&
  chmod +x /dev/shm/my_script.sh &&
  tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
    echo "hacky, but works"
EOF
    
por 05.01.2017 / 23:33
0

Veja também link para exemplos sobre o uso do envio chaves em um painel desanexado.

    
por 26.06.2018 / 21:12