Ejecutar función en tmux dentro del script bash

Ejecutar función en tmux dentro del script bash

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:

  1. Escribe otro script, pon tu internalfunción en él y úsalo en su lugar.
  2. Escribe unbibliotecascript que contiene todas sus funciones pero nada más, sourceese 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.

información relacionada