我正在使用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.g
和Brl-Cad
。
我想使用上面的示例绘制一个球体。
答案 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代码”只是一个参数)