Функция bash с параметрами, которые нельзя использовать с eval в Msys2

Я использую Msys2 из PortableApps под Win 10. Ответ на этот вопрос (т. Е. Идентификация и решение проблемы) может быть связан с частью использования Unix/Linux или с его "адаптацией" к Windows через Msys2. Я не знаю этого заранее (в противном случае, я бы, вероятно, решил это сам!), Поэтому я ранее публиковал (теперь удалил) аналогичный вопрос на другом сайте SE, который достигает другой аудитории.

У меня есть функция оболочки, определенная в my_fun.sh как

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

т.е. some_executable принимает параметры и параметры. Я могу бегать в командной строке

$ some_executable -3 input.dat output.dat

Теперь, если я запускаю из сценария оболочки myscript.sh

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

echo Я уверен, что линия, что я хочу) Я получаю

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

Если я сделаю export -f myfun а потом ./myscript.shЯ начинаю получать

MYAPP=
environment: -3: command not found

который показывает источник проблемы (благодаря комментарию Камиля М).

В коробке с Ubuntu, до export -f ... Я получаю ту же ошибку, что и выше. Но export устраняет проблему

В чем причина этого?Это связано с чистым использованием Linux/Bash, или синтаксический анализ, расширение оболочки, наследование оболочки и т. Д. В Msys2 немного отличаются?Как я могу это исправить, чтобы тот же сценарий работал под Msys2 и Ubuntu?

Связанный: https://unix.stackexchange.com/questions/444946/how-can-we-run-a-command-stored-in-a-variable

1 ответ

Мне пришлось

export MYAPP=some_executable

в my_fun.sh, Затем другой скрипт считывает значение переменной.

Другие вопросы по тегам