谁能为我解释一下clojure中的sh以便执行系统命令?

时间:2019-06-26 11:49:26

标签: clojure clojure.spec clojure-core.logic

我正在使用Mac OS。我想使用(use '[clojure.java.shell :only [sh]])执行系统命令,就像在How to execute system commands?中一样。我已经读过https://clojuredocs.org/clojure.java.shell/sh,但无法理解诸如可以在一种语法中传递多少个参数之类的东西。

在Windows中,我尝试使用(sh "cmd" "/C" "dir"),但仍可以使用,但是在Mac OS中,如何执行以上语法?此外,我想传递的参数不仅仅是dir。例如,我要执行(sh "cmd" "/c" "mged" "test.g")。 注意:mged引用了test.gBrl-Cad

我想使用上面的示例绘制一个球体。

2 个答案:

答案 0 :(得分:1)

在MacOS或Linux上,此方法有效:

user=> (require '[clojure.java.shell :as sh])
nil
user=> (sh/sh "ls" "-la")
...

答案 1 :(得分:0)

clojure.java.shell只是使用给定的参数(以及:env:dir以及...-参见文档)生成该过程。因此,首先最有可能在OSX / Unix上没有cmd,但是通常会有一个shell。外壳上与cmd /c的“相同”是-c-c接受一个一个参数,您可以在此处编写“ shell代码”-这意味着您可以使用管道,重定向,env-vars ...-因此,如果您只想执行具有参数的工具,请使用:

(sh "mged" "test".g")

如果要使用“外壳功能”,请使用:

(sh "/bin/sh" "-c" "echo ${TERM} | tr x u")

(请注意,“ shell代码”只是一个参数)