bash-Funktion mit Parametern, die nicht mit eval in Msys2 verwendet werden können

453
sancho.s

Ich verwende Msys2 von PortableApps unter Win 10. Die Antwort auf diese Frage (dh Identifizierung und Lösung des Problems) kann mit dem Unix / Linux-Teil der Nutzung oder mit seiner "Anpassung" an Windows über Msys2 zusammenhängen. Ich weiß es nicht im Voraus (sonst hätte ich es wahrscheinlich selbst gelöst!), Also hatte ich vorher (jetzt entfernt) eine ähnliche Frage in einer anderen SE-Site veröffentlicht, die ein anderes Publikum erreicht.

Ich habe eine Shell-Funktion in definiert my_fun.shals

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

dh some_executablenimmt Optionen und Parameter. Ich kann an der Kommandozeile laufen

$ some_executable -3 input.dat output.dat 

Wenn ich jetzt von einem Shell-Skript aus laufe myscript.sh

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

(damit echoich sicher bin, dass die Leitung das ist, was ich will) bekomme ich

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

Wenn ich export -f myfunund dann ./myscript.sh fange ich an zu bekommen

MYAPP= environment: -3: command not found 

was die Ursache des Problems zeigt (dank des Kommentars von Kamil M).

In einer Ubuntu-Box export -f ...bekomme ich vorher den gleichen Fehler wie oben. Aber exportbehebt das Problem.

Was ist die Ursache dafür? Hat es etwas mit der reinen Linux / Bash-Verwendung zu tun, oder ist Parsing, Shell-Erweiterung, Shell-Vererbung usw. unter Msys2 etwas anders? Wie kann ich das beheben, so dass das gleiche Skript unter Msys2 und Ubuntu funktioniert?

Verwandte Themen: https://unix.stackexchange.com/questions/444946/how-can-we-run-a-command-stored-in-a-variable

0
Welchen "#!" - Interpreter verwendet Ihr Skript? Welche bash-Version laufen Sie? grawity vor 5 Jahren 0
@grawity - 1) #! / bin / bash 2) 4.4.19 (3) -Freigabe (i686-pc-msys) sancho.s vor 5 Jahren 0
https://unix.stackexchange.com/q/471008/13792 choroba vor 5 Jahren 0
`-3: Befehl nicht gefunden`, also vermute ich, dass MYAPP leer ist. Ist es in demselben Skript definiert? Wenn nicht, wird es exportiert? Kamil Maciorowski vor 5 Jahren 0
@ KamilMaciorowski - Du hast recht. Das muss ich dann reparieren. sancho.s vor 5 Jahren 0

1 Antwort auf die Frage

1
sancho.s

Ich muss

export MYAPP=some_executable 

in my_fun.sh. Dann liest das andere Skript den Wert der Variablen.