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