
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 é:
- Escreva outro script, coloque sua
internal
função nele e use-o. - Escreva umbibliotecascript contendo todas as suas funções, mas nada mais,
source
aquele 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.