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

2

Meu script bash tem algumas funções e eu preciso de um painel tmux para executar a função dentro do script bash. Por exemplo, o código abaixo não funcionará e será reportado 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 em que o painel tmux foi chamado?

    
por Demontager 23.03.2014 / 00:46

2 respostas

1

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 man page do tmux não existe referência a ela.

Eu não acho que isso seja possível, pois o contexto do script em que você está criando a sessão do tmux é totalmente diferente do contexto dentro da sessão do tmux. Assim, nem sequer é capaz de ter conhecimento dessas 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 é um dos seguintes:

  1. Escreva outro script, coloque sua função internal nela e use-a.
  2. Escreva um script library contendo todas as suas funções, mas nada mais, source do script da biblioteca nos scripts application para que as funções estejam disponíveis e use esses scripts de aplicativo .

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

    
por 05.04.2014 / 00:56
0

Eu escrevi uma função bash que usa uma função como argumento e a carrega em uma sessão do tmux usando 'send-keys'. Obviamente, o painel de recebimento do tmux precisa estar executando o bash ou algo compatível quando esta função é 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}"
}
    
por 01.12.2016 / 03:20

Tags