Acessando funções de peixe do perl

1

No bash eu posso fazer:

foo() { echo bar; }
export -f foo
perl -e 'system "bash -c foo"'

Eu também posso acessar a definição da função:

perl -e 'print "foo".$ENV{"BASH_FUNC_foo%%"}'

Como faço o mesmo em fish ?

Editar:

Com isso eu posso obter a definição da função:

functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end

Se eu puder colocar isso em uma variável de ambiente acessível a partir do Perl, eu deveria ser capaz de executar isso antes de executar o comando. Tão semelhante a:

setenv funcdefs (functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end)
perl -e 'system($ENV{"funcdefs"},"foo")'

Mas parece que a configuração funcdefs ignora as novas linhas: $ ENV {"funcdefs"} é uma linha horrivelmente longa.

A parte ímpar é que parece fish faz suportar variáveis de ambiente contendo novas linhas:

setenv newline 'foo
bar'
echo "$newline"

Posso incentivar fish a colocar a saída do comando em uma variável, mas mantendo as novas linhas?

    
por Ole Tange 20.05.2015 / 10:16

2 respostas

0

Feio pra caramba, mas funciona:

function foo
  echo bar;
end

setenv funcdefs (functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end|perl -pe 's/\n/
function foo
  echo bar;
end

setenv funcdefs (functions -n | perl -pe 's/,/\n/g' | while read d; functions $d; end|perl -pe 's/\n/%pre%1/')
perl -e '$ENV{"funcdefs"}=~s/%pre%1/\n/g;system ("fish", "-c", $ENV{funcdefs}."foo")'
1/') perl -e '$ENV{"funcdefs"}=~s/%pre%1/\n/g;system ("fish", "-c", $ENV{funcdefs}."foo")'
    
por 20.05.2015 / 15:41
2

Em fish , você pode usar funcsave para salvar a definição de função na sessão fish:

$ function qwerty
    echo qwerty
end
$ funcsave qwerty
$ fish -c qwerty
qwerty
$ perl -e 'system "fish -c qwerty"'
qwerty
    
por 20.05.2015 / 10:54