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

395
sancho.s

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

0
Какой интерпретатор `#!` Использует ваш скрипт? Какую версию Bash вы используете? grawity 5 лет назад 0
@grawity - 1) #! / bin / bash 2) 4.4.19 (3) -релиз (i686-pc-msys) sancho.s 5 лет назад 0
https://unix.stackexchange.com/q/471008/13792 choroba 5 лет назад 0
`-3: команда не найдена`, поэтому я подозреваю, что` MYAPP` пуст. Это определено в том же сценарии? Если нет, экспортируется ли это? Kamil Maciorowski 5 лет назад 0
@KamilMaciorowski - Вы правы. Я должен исправить это тогда. sancho.s 5 лет назад 0

1 ответ на вопрос

1
sancho.s

Мне пришлось

export MYAPP=some_executable 

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