2017-10-13 1 views
2

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?

+0

Was Sie die Ausgabe erwartet haben würde? –

+0

In meinem Fall ist der Befehl in der Shell ausgeführt: echo "$?". Aber was ich wirklich tun möchte, ist: echo $? – skillness

Antwort

0

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.

2

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"} 
+0

Ich weiß, was du meinst ... em .... – skillness

+0

Ich bin nur neugierig, wie kann ich Echo $ ausführen? Mit clojure.java.shell/sh – skillness

+0

Welche Ausgabe erwarten Sie von "echo $?". – erdos

Verwandte Themen