
Mi script bash tiene algunas funciones y necesito un panel tmux para ejecutar la función dentro del script bash. Por ejemplo, el siguiente código no funcionará y se informará que no se encontró el comando "interno".
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
}
Entonces, ¿cómo puedo decirle a tmux que ejecute la función desde el script donde se invocó el panel tmux?
Respuesta1
Escribí una función bash que toma una función como argumento y la carga en una sesión tmux usando 'teclas de envío'. Obviamente, el panel tmux receptor debe estar ejecutando bash o algo compatible cuando se ejecuta esta función.
_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}"
}
Respuesta2
Hasta donde yo sé, no se pueden exportar funciones de Shell a una instancia de tmux. Al menos en la versión 1.9 de la página de manual de tmux no hay ninguna referencia al respecto.
No creo que esto sea posible en absoluto ya que el contexto del script donde está creando la sesión tmux es completamente diferente del contexto dentro de la sesión tmux. Por tanto, ni siquiera es capaz de tener conocimiento de estas funciones. Además, tmux podría incluso utilizar un shell diferente al que usted está utilizando.
Sin embargo, para brindar algunas alternativas, lo que puede hacer es una de:
- Escribe otro script, pon tu
internal
función en él y úsalo en su lugar. - Escribe unbibliotecascript que contiene todas sus funciones pero nada más,
source
ese script de biblioteca ensolicitudscripts para que sus funciones estén disponibles allí y utilice estos scripts de aplicación en su lugar.
La segunda alternativa también le brinda más higiene del código y mejor reutilización.