我嘗試做它喜歡:
(shell/sh "echo" '"$?")
然而,返回
{:exit 0, :out "$?\n", :err ""}
所以,我怎麼能給$?作爲參數,但字符串「回聲」與clojure.java.shell?
我嘗試做它喜歡:
(shell/sh "echo" '"$?")
然而,返回
{:exit 0, :out "$?\n", :err ""}
所以,我怎麼能給$?作爲參數,但字符串「回聲」與clojure.java.shell?
恕我直言,它不可能得到你想要的shell/sh。
當您運行echo $?在shell中,shell將其重寫爲echo 0(假設最後一條命令成功)。
當你運行shell/sh時,它只是在後臺調用** Runtime.exec([「echo」'「$?」])。 $?傳遞給echo和echo不知道$意味着什麼。
當您在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"}
那你期望的輸出會是什麼? –
就我而言,在shell中運行的命令是:echo「$?」。但我真正想做的是:echo $? – skillness