sshを介したbash関数のエクスポート


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

だから私が今やらなければならないのは、$ myfuncが本当に関数myfuncであることをどうにかしてbashに伝えることです。

どうやってやるの?

回答:


1

これは実際にはかなり簡単であることが証明されています(ただし、cshでは機能しません)。簡単に

eval myfunc$myfunc

残念ながら通常の変数はクラッシュします。これを避けるために、内容が '(){'で始まる変数の評価だけを行ってください。それは関数に対するbashの署名のようです。


今日の使用 env_parallel GNU Parallelから。それは機能以上に働きます。
Ole Tange
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.