Bash-Funktionen über ssh exportieren

2

So habe ich einen Weg gefunden, Umgebungsvariablen über ssh zu übertragen, ohne Server oder Client ändern zu müssen: Umgebungsvariablen über SSH / quoting in bash / sh / csh / tcsh übertragen

Aber ich möchte auch Bash-Funktionen wie diese übertragen können:

$ myfunc() {
> echo Func $1
> }
$ export -f myfunc
$ parallel myfunc ::: a
Func a

Funktionen werden nicht über ssh übertragen:

$ parallel -S server myfunc ::: a
bash: myfunc: command not found
$ parallel --env myfunc -S server myfunc ::: a
bash: line 2: myfunc: command not found

Der Inhalt der Funktion wird aber übersichtlich übertragen:

$ parallel --env myfunc -S server echo \$myfunc ::: a
() { echo Func $1} a

Es scheint also alles, was ich jetzt tun muss, zu sein, um bash irgendwie mitzuteilen, dass $ myfunc wirklich die Funktion myfunc ist.

Wie kann ich das machen?

Ole Tange
quelle

Antworten:

1

Das hat sich eigentlich als ziemlich einfach erwiesen (außer es funktioniert nicht in csh). Mach einfach:

eval myfunc$myfunc

Es stürzt leider normale Variablen ab, um dies zu vermeiden, führen Sie die Auswertung nur für Variablen durch, deren Inhalt mit '() {' beginnt; das scheint bashs unterschrift für funktionen zu sein.

Ole Tange
quelle
Heute env_parallelvon GNU Parallel verwenden. Es funktioniert für mehr als nur Funktionen.
Ole Tange