den folgenden Befehl in der REPL Executing:Clojure shell/sh behandelt einzelne Argumente nicht korrekt?
(shell/sh "ls" "-lah" "'resources'")
gibt die folgende Ausgabe:
{:exit 2, :out "", :err "ls: cannot access 'resources': No such file or directory\n"}
den gleichen Befehl in der Bash-Shell Ausführen der richtige Ausgabe ergibt, die Liste der Dateien im Verzeichnis resources . Nach meinem Verständnis bedeutet dies, dass shell/sh nicht in der Lage ist, mit einfachen Anführungszeichen versehene Argumente korrekt zu behandeln. Ist das wahr oder mache ich etwas falsch?
Das obige Beispiel ist ein einfaches Beispiel, da ich normalerweise den Ordnernamen nicht einfach angeben muss. Aber warum ist das ein echtes Problem, weil ich versuche, Audiodateien zu konaktieren, indem ich den folgenden ffmpeg-Befehl mit shell/sh ausführe;
ffmpeg -i resources/ffmpeg_working/1.flac
-i resources/ffmpeg_working/2.flac
-i resources/ffmpeg_working/3.flac
-i resources/ffmpeg_working/4.flac
-filter_complex '[0:0][1:0][2:0][3:0]concat=n=4:v=0:a=1[out]'
-map '[out]'
resources/ffmpeg_working/done.flac
Dies ergibt die folgende Ausgabe
Stream map ''[out]'' matches no streams.
Noch einmal, wenn ich die gleiche ffmpeg-Befehl in der Bash ausführen Shell es verkettet die Dateien erfolgreich. Daher scheint es, dass das Argument mit einem einzelnen Anführungszeichen nicht korrekt behandelt wird.
Danke für die Antwort! Bedeutet es also, dass es unmöglich ist, Shell-Befehle auszuführen, die * einfach zitierte Argumente benötigen? – Jarzka
Sie haben die Antwort vollständig falsch verstanden. Sie führen überhaupt keinen Shell-Befehl aus, Sie führen ein Programm wie mit ['EXEC (3)'] (http://linux.die.net/man/3/exec) aus. Du kannst Dinge nicht zitieren, weil du nie etwas zitieren musst. – amalloy
Nach dieser Seite https://trac.ffmpeg.org/wiki/Concatenate "sind die einfachen Anführungszeichen um den gesamten Filterabschnitt erforderlich." und deshalb muss ich sie zitieren. – Jarzka