通过 ssh 导出 bash 函数

通过 ssh 导出 bash 函数

因此我找到了一种无需更改服务器和客户端即可通过 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

事实证明这相当容易(除了它在 csh 中不起作用)。只需执行以下操作:

eval myfunc$myfunc

不幸的是,它导致正常变量崩溃,为了避免这种情况,只对内容以 '() {' 开头的变量进行 eval;这似乎是 bash 对函数的签名。

相关内容