Bash işlevlerini ssh ile dışa aktarma


2

Böylece ne sunucu ne de istemciyi değiştirmek zorunda kalmadan ortam değişkenlerini ssh ile transfer etmenin bir yolunu buldum: bash / sh / csh / tcsh içinde ortam değişkenini SSH / quoting yoluyla aktarma

Ancak bunun gibi bash fonksiyonlarını da transfer edebilmek isterim:

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

İşlevler ssh ile aktarılmaz:

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

Ancak fonksiyonun içeriği hoş bir şekilde aktarılır:

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

Görünüşe göre şu anda tek yapmam gereken, bir şekilde bash etmenin $ myfunc fonksiyonunun myfunc işlevi olduğunu söylemek.

Bunu nasıl yapabilirim?

Yanıtlar:


1

Bu aslında oldukça kolay olduğunu kanıtladı (csh ile çalışmaz hariç). Basitçe yapın:

eval myfunc$myfunc

Maalesef normal değişkenleri çökertir, bundan kaçınmak için yalnızca içeriğin '() {' ile başladığı değişkenlerin değerlendirmesini yapın; Bu, bash'ın işlevler için imzası gibi görünüyor.


Bugün env_parallelGNU Parallel'den kullanın . İşlevlerden daha fazlası için çalışır.
Ole Tange
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.