Execute a função no tmux dentro do script bash

Execute a função no tmux dentro do script bash

Meu script bash tem algumas funções e preciso de um painel tmux para executar a função no script bash. Por exemplo, o código abaixo não funcionará e será relatado que o comando "interno" não foi encontrado.

common() {
internal() {
echo "Function executed"
}   

SESSIONNAME="ses"

tmux new-session -s $SESSIONNAME -n session -d
tmux split-window -t $SESSIONNAME:0 -h

tmux send-keys 'internal' 'C-m'
tmux select-window -t $SESSIONNAME:0
tmux attach -t $SESSIONNAME
}

Então, como posso dizer ao tmux para executar a função do script onde o painel tmux foi invocado?

Responder1

Eu escrevi uma função bash que pega uma função como argumento e a carrega em uma sessão tmux usando 'teclas de envio'. Obviamente, o painel receptor do tmux precisa estar executando o bash ou algo compatível quando esta função for executada.

_pass_to_tmux() {
    _FUNC_TO_PASS="${1}"
    _IFS_BACKUP="${IFS}"
    IFS=$'\n'
    for i in $(type ${_FUNC_TO_PASS} | tail -n +2); do
        tmux send-keys "${i}" C-m
    done 
    IFS="${_IFS_BACKUP}"
}

Responder2

Até onde eu sei, você não pode exportar funções do shell para uma instância do tmux. Pelo menos na versão 1.9 da página man do tmux não há referência a ela.

Não acho que isso seja possível, pois o contexto do script onde você está criando a sessão tmux é totalmente diferente do contexto da sessão tmux. Assim, não é sequer capaz de ter conhecimento destas funções. Além disso, o tmux pode até usar um shell diferente daquele que você está usando.

No entanto, para fornecer algumas alternativas, o que você pode fazer é:

  1. Escreva outro script, coloque sua internalfunção nele e use-o.
  2. Escreva umbibliotecascript contendo todas as suas funções, mas nada mais, sourceaquele script de biblioteca emaplicativoscripts para que suas funções fiquem disponíveis e use esses scripts de aplicativo.

A segunda alternativa também oferece mais higiene de código e melhor capacidade de reutilização.

informação relacionada