Функция 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
, Затем другой скрипт считывает значение переменной.