Я использую 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 ответ1

1

Мне пришлось

export MYAPP=some_executable

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .