clojure.java.shell/sh
führt einen Befehl (das erste an sh
function übergebene Argument) mit angegebenen Argumenten aus (der Rest der Parameter wird an sh
übergeben).
Wenn Sie Folgendes ausführen:
(sh "ls" "-a" "| grep" "Doc")
Sie bitten% ce_de% mit den Parametern ls
, -a
und | grep
auszuführen.
Wenn Sie Doc
in Ihr Terminal eingeben, interpretiert die Shell es als ls -a | grep Doc
, wobei es seine Standardausgabe ausgibt und als std in einen anderen Prozess ( ls
) übergibt, der von der Shell gestartet werden soll.
Sie könnten simulieren, was die Shell macht, indem Sie grep
als einen Prozess starten, ihre std-Ausgabe nehmen und dann ls
ausführen und die Ausgabe von grep
als Eingabe übergeben.
Die einfachere Lösung wäre, einfach einen ls
-Prozess anzufordern, alles so auszuführen, als wäre es in Terminal eingetippt:
shell
Es ist wichtig, (sh "bash" "-c" "ls -a | grep Doc")
und -c
als separate Argumente zu übergeben, damit bash sie als separate Parameter erhält. Sie müssen auch den gesamten Befehl, den Sie ausführen möchten, als eine Zeichenfolge ( ls ...
) haben. Andernfalls wird nur das erste Argument nach ls -a | grep Doc
als Befehl behandelt. Zum Beispiel wird dies nicht tun, was Sie möchten:
-c