Führen Sie die Funktion in tmux innerhalb eines Bash-Skripts aus

Führen Sie die Funktion in tmux innerhalb eines Bash-Skripts aus

Mein Bash-Skript hat einige Funktionen und ich brauche einen Tmux-Bereich, um die Funktion innerhalb des Bash-Skripts auszuführen. Der folgende Code funktioniert beispielsweise nicht und es wird gemeldet, dass der Befehl „intern“ nicht gefunden wurde.

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
}

Wie kann ich tmux also anweisen, eine Funktion aus dem Skript auszuführen, in dem das tmux-Fenster aufgerufen wurde?

Antwort1

Ich habe eine Bash-Funktion geschrieben, die eine Funktion als Argument verwendet und sie mit „Send-Keys“ in eine Tmux-Sitzung lädt. Natürlich muss im empfangenden Tmux-Fenster Bash oder etwas Kompatibles ausgeführt werden, wenn diese Funktion ausgeführt wird.

_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}"
}

Antwort2

Soweit ich weiß, kann man Shell-Funktionen nicht in eine tmux-Instanz exportieren. Zumindest in der Version 1.9 der tmux-Manpage gibt es keinen Hinweis darauf.

Ich glaube nicht, dass das überhaupt möglich ist, da der Kontext des Skripts, in dem Sie die tmux-Sitzung erstellen, völlig anders ist als der Kontext innerhalb der tmux-Sitzung. Daher kann es diese Funktionen nicht einmal kennen. Außerdem verwendet tmux möglicherweise sogar eine andere Shell als die, die Sie verwenden.

Um jedoch einige Alternativen anzubieten, können Sie Folgendes tun:

  1. Schreiben Sie ein anderes Skript, fügen Sie Ihre internalFunktion darin ein und verwenden Sie dieses stattdessen.
  2. Schreib einBibliothekSkript, das alle Ihre Funktionen enthält, aber sonst nichts, sourcedieses Bibliotheksskript inAnwendungSkripte, sodass deren Funktionen dort verfügbar werden, und verwenden Sie stattdessen diese Anwendungsskripte.

Die zweite Alternative bietet Ihnen außerdem mehr Codehygiene und bessere Wiederverwendbarkeit.

verwandte Informationen