2

Поэтому я нашел способ передачи переменных среды через ssh без необходимости изменения ни сервера, ни клиента: передача переменной среды через SSH / цитирование в bash / sh / csh / tcsh

Но я также хотел бы иметь возможность передавать функции bash, подобные этой:

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

Функции не передаются через ssh:

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

Но содержание функции передается красиво:

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

Поэтому, похоже, все, что мне нужно сейчас сделать, это как-то сказать bash, что $ myfunc - это действительно функция myfunc.

Как я могу это сделать?

1 ответ1

1

Это на самом деле оказалось довольно легко (за исключением того, что он не работает в csh). Просто сделайте:

eval myfunc$myfunc

К сожалению, происходит сбой нормальных переменных, чтобы избежать этого, выполняйте eval только для переменных, для которых содержимое начинается с '() {'; это похоже на подпись bash для функций.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .