2017-10-13 20 views
2

我嘗試做它喜歡:

(shell/sh "echo" '"$?") 

然而,返回

{:exit 0, :out "$?\n", :err ""} 

所以,我怎麼能給$?作爲參數,但字符串「回聲」與clojure.java.shell?

+0

那你期望的輸出會是什麼? –

+0

就我而言,在shell中運行的命令是:echo「$?」。但我真正想做的是:echo $? – skillness

回答

0

恕我直言,它不可能得到你想要的shell/sh。

  • 當您運行echo $?在shell中,shell將其重寫爲echo 0(假設最後一條命令成功)。

  • 當你運行shell/sh時,它只是在後臺調用** Runtime.exec([「echo」'「$?」])。 $?傳遞給echo和echo不知道$意味着什麼。

2

當您在Bash中執行命令時,程序的返回值將被綁定到$?。這意味着當您在bash中執行echo "$?"時,它將用上一個返回值替換$?,然後才調用echo命令。它在bash(和bash-like shell)中是內部的,在其他編程語言(如Java或Clojure)中不可用。

Clojure的clojure.java.shell/sh基本上調用Runtime.getRuntime().exec(...)。返回值將在返回地圖的:exit鍵之下。

一個例子爲成功 SH電話:

(clojure.java.shell/sh "ls" "target") 
=> 
{:exit 0, :out "classes\nrepl-port\nstale\n", :err ""} 

unsuccessfull電話:

(clojure.java.shell/sh "ls" "nothing") 
=> 
{:exit 2, :out "", :err "ls: cannot access 'nothing': No such file or directory\n"} 
+0

我知道你的意思...... em .... – skillness

+0

我只是好奇我該如何運行echo $?與clojure.java.shell/sh – skillness

+0

你希望運行「echo $?」的輸出是什麼。 – erdos