bash function com parâmetros não utilizáveis com eval em Msys2

0

Estou usando o Msys2 do PortableApps no Win 10. A resposta a esta pergunta (ou seja, identificação e solução do problema) pode estar relacionada à parte de uso do Unix / Linux, ou à sua "adaptação" ao Windows via Msys2. Eu não sei com antecedência (caso contrário, eu provavelmente teria resolvido isso sozinho!), Então eu tinha postado antes (agora removido) uma pergunta semelhante em outro site da SE , que alcança um público diferente.

Eu tenho uma função shell definida em my_fun.sh as

MYAPP=some_executable
function myfun() { echo "MYAPP=${MYAPP}" && ${MYAPP} "$@" ; }

, ou seja, some_executable aceita opções e parâmetros. Eu posso correr na linha de comando

$ some_executable -3 input.dat output.dat

Agora, se eu executar a partir de um script de shell myscript.sh

comm="myfun -3 input.dat output.dat"
echo ${comm}
eval ${comm}

(com echo eu me certifico de que a linha é o que eu quero) Eu recebo

./myscript.sh: line 8: myfun: command not found

Se eu fizer export -f myfun e, em seguida, ./myscript.sh Eu começo a ficar

MYAPP=
environment: -3: command not found

que mostra a fonte do problema (graças ao comentário de Kamil M).

Em uma caixa do Ubuntu, antes de export -f ... , recebo o mesmo erro acima. Mas export corrige o problema.

Qual é a causa disso? É relacionado ao uso puro do Linux / Bash, ou é análise, expansão de shell, herança de shell, etc., sob Msys2 ligeiramente diferente? Como faço para corrigir isso, de forma que o mesmo script funcione com Msys2 e Ubuntu?

Relacionados: link

    
por sancho.s 24.09.2018 / 08:39

1 resposta

1

Eu tenho que

export MYAPP=some_executable

em my_fun.sh . Em seguida, o outro script lê o valor da variável.

    
por 14.10.2018 / 13:06