Мне пришлось
export MYAPP=some_executable
в my_fun.sh
. Затем другой скрипт считывает значение переменной.
Я использую Msys2 из PortableApps под Win 10. Ответ на этот вопрос (т. Е. Определение и решение проблемы) может быть связан с частью использования Unix / Linux или с его «адаптацией» к Windows через Msys2. Я не знаю этого заранее (в противном случае, я бы, вероятно, решил это сам!), Поэтому я ранее публиковал (теперь удалил) аналогичный вопрос на другом сайте SE, который достигает другой аудитории.
У меня есть функция оболочки, определенная my_fun.sh
как
MYAPP=some_executable function myfun() { echo "MYAPP=$" && $ "$@" ; }
т.е. some_executable
принимает параметры и параметры. Я могу запустить в командной строке
$ some_executable -3 input.dat output.dat
Теперь, если я запускаю из сценария оболочки myscript.sh
comm="myfun -3 input.dat output.dat" echo $ eval $
(с тем, 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
Мне пришлось
export MYAPP=some_executable
в my_fun.sh
. Затем другой скрипт считывает значение переменной.