Может кто-нибудь объяснить мне о sh в clojure для того, чтобы выполнить системную команду? - PullRequest
0 голосов
/ 26 июня 2019

Я использую Mac OS. Я хочу выполнить системную команду, используя (use '[clojure.java.shell :only [sh]]), как в Как выполнять системные команды? . Я прочитал 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.

Я хочу нарисовать сферу, используя приведенный выше пример.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

В MacOS или Linux это работает:

user=> (require '[clojure.java.shell :as sh])
nil
user=> (sh/sh "ls" "-la")
...
0 голосов
/ 26 июня 2019

clojure.java.shell просто порождает процесс с заданными аргументами (а :env и :dir и ... - см. Документ).Поэтому, прежде всего, скорее всего, нет cmd в OSX / Unix, но обычно есть оболочка.И "то же самое", что и cmd /c на оболочке -c.-c принимает один аргумент, и вы можете написать свой «код оболочки» - это означает, что вы можете использовать каналы, перенаправления, env-vars, ... - так что если вы просто хотите запустить инструмент спараметр, используйте:

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

Если вы хотите использовать «функции оболочки», используйте:

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

(обратите внимание, что «код оболочки» - это всего лишь один аргумент)

...