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?

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.


Heute env_parallelvon GNU Parallel verwenden. Es funktioniert für mehr als nur Funktionen.
Ole Tange
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.