ich versuche, es zu tun:
(shell/sh "echo" '"$?")
Aber es gibt
{:exit 0, :out "$?\n", :err ""}
So wie ich $ geben kann? als Argument aber String um "Echo" mit clojure.java.shell?
ich versuche, es zu tun:
(shell/sh "echo" '"$?")
Aber es gibt
{:exit 0, :out "$?\n", :err ""}
So wie ich $ geben kann? als Argument aber String um "Echo" mit clojure.java.shell?
IMHO ist es nicht möglich, mit shell/sh zu bekommen, was Sie wollen.
Wenn Sie echo $ ausführen? in der Shell, schreibt die Shell es in echo 0 (unter der Annahme, dass der letzte Befehl erfolgreich ist).
Wenn Sie shell/sh ausführen, ruft es nur die ** Runtime.exec (["echo" '"$?"]) Im Hintergrund auf. $? wird an echo weitergeleitet und echo hat keine ahnung was $ bedeutet.
Wenn Sie einen Befehl in Bash ausführen, wird der Rückgabewert des Programms an $?
gebunden. Das bedeutet, wenn Sie echo "$?"
in bash ausführen, wird $?
durch den letzten Rückgabewert ersetzt und erst danach der Befehl echo
aufgerufen. Es ist intern in bash (und bash-artigen Shells) und nicht in anderen Programmiersprachen wie Java oder Clojure verfügbar.
Clojures clojure.java.shell/sh
nennt grundsätzlich Runtime.getRuntime().exec(...)
. Der Rückgabewert liegt unter dem Schlüssel :exit
der zurückgegebenen Karte.
Ein Beispiel zu einem erfolgreichen sh Aufruf:
(clojure.java.shell/sh "ls" "target")
=>
{:exit 0, :out "classes\nrepl-port\nstale\n", :err ""}
Ein unsuccessfull Aufruf:
(clojure.java.shell/sh "ls" "nothing")
=>
{:exit 2, :out "", :err "ls: cannot access 'nothing': No such file or directory\n"}
Was Sie die Ausgabe erwartet haben würde? –
In meinem Fall ist der Befehl in der Shell ausgeführt: echo "$?". Aber was ich wirklich tun möchte, ist: echo $? – skillness