Anführungszeichen werden nicht an Bashscript übergeben
-
Hallo!
Ich bin gerade dabei, ices-0.4 zu modifizieren.
Dabei möchte ich ein Bashscript aufrufen.sprintf(command, "%s \" %s \"", "modify-mp3.sh" , ices_config.pm.get_next ()); system (command);
Es soll
modify-mp3.sh "<ergebnis von ices_config.pm.get_next ()>" aufgerufen werden.
Jedoch werden im Script die " durch Leerzeichen ersetzt, weshalb das
Script nicht funktioniert.
Ich kenn mich in reinem C nicht so aus, da ich sonst in C++ programmiere.
Was mach ich falsch?
-
Die Anführungszeichen werden von der Shell entfernt, weil sie normalerweise dafür genutzt werde, um mehrere Worte zu einem Kommandozeilen-Argument zusammen zu fassen.
Willst du die Anführungszeichen mit als Argument übergeben, musst du sie escapen. Du kannst das selber auf der Shell testen:
> echo "asdf" asdf > echo "\"asdf\"" "asdf"
Alternativ benutzt du statt
system
die Funktionenexecl
undfork
.
-
Escapen hab ich schon versucht. Mein Problem sind die Leerzeichen, die
anstatt der Anführungszeichen übergeben werden. Ich muss ja schon im
C-Code die Anführungszeichen mit übergeben, da ices_config.pm.get_next ()
Leerzeichen enthalten kann. Das Ergebnis dieser Funktion ist der voll-
ständige Pfad zur nächsten MP3-Datei. Und der kann Leerzeichen enthalten.
-
Naja, aber wenn das Shell-Script auch Anführungszeichen bekommen soll und die nicht nur für die ausführende Shell gedacht sind, musst Du eben Backslashes zum escapen escapen und die Anführungszeichen escapen.
Habe mir den Code jetzt nicht angesehen, aber es klingt so, als wolltest Du
\\\"
.
-
Ich hab auch schon
sprintf(command, "%s \\\" %s \\\"", "modify-mp3.sh" , ices_config.pm.get_next ());
probiert. Danach kommt nur noch ein einzelnes " an.
-
So hat's funktioniert:
sprintf(modify_command, "%s \"%s\"", "modify-mp3.sh", ices_config.pm.get_next ());
Danke!
-
mase schrieb:
So hat's funktioniert:
sprintf(modify_command, "%s \"%s\"", "modify-mp3.sh", ices_config.pm.get_next ());
Danke!
Das war doch genau Dein ursprünglicher Ansatz. Nur dass Du aus - mir unverständlichen Gründen - oben noch Leerzeichen dazwischengepackt hast.
Naja, Hauptsache, die Sache ist erledigt, hatte Deine Frage irgendwie falsch verstanden.