Ich muss
export MYAPP=some_executable
in my_fun.sh
. Dann liest das andere Skript den Wert der Variablen.
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.sh
als
MYAPP=some_executable function myfun() { echo "MYAPP=$" && $ "$@" ; }
dh some_executable
nimmt 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 echo
ich sicher bin, dass die Leitung das ist, was ich will) bekomme ich
./myscript.sh: line 8: myfun: command not found
Wenn ich export -f myfun
und 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 export
behebt 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
Ich muss
export MYAPP=some_executable
in my_fun.sh
. Dann liest das andere Skript den Wert der Variablen.