Exportando funções bash pelo ssh

2

Então eu encontrei uma maneira de transferir variáveis de ambiente através do ssh sem ter que mudar nem o servidor nem o cliente: Transferindo a variável de ambiente através de SSH / citando em bash / sh / csh / tcsh

Mas eu também gostaria de poder transferir funções bash como esta:

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

As funções não são transferidas por meio do 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

Mas o conteúdo da função é bem transferido:

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

Então parece que tudo que eu preciso fazer agora é de alguma forma dizer ao bash que $ myfunc é realmente a função myfunc.

Como posso fazer isso?

    
por Ole Tange 17.07.2013 / 11:13

1 resposta

1

Isso realmente provou ser bastante fácil (exceto que não funciona no csh). Basta fazer:

eval myfunc$myfunc

Infelizmente, ele trava variáveis normais, para evitar isso, apenas faça o eval para variáveis para as quais o conteúdo começa com '() {'; que parece ser a assinatura do bash para funções.

    
por 17.07.2013 / 11:46