首页 > 解决方案 > 如何执行拆分字符串作为 Clojure.shell/sh 的参数

问题描述

我有一个类似的命令:

(clojure.java.shell/sh "curl" "https://somesite.com" "-F" "file=@somefile.txt")

我想创建一个函数来运行我提供的标准shell命令......像这样:

(defn run-shell-command [command]
  (clojure.java.shell/sh (clojure.string/split command #" ")))

这样我就可以这样称呼它:

(run-shell-command "curl https://somesite.com -F file=@somefile.txt")

但这会引发:

Unhandled java.lang.IllegalArgumentException
   No value supplied for key: ["curl" "https://somesite.com" "-F" "file=@somefile.txt"]

我该如何进行这项工作?

(当然,对如何做到这一点的更好想法持开放态度)

标签: clojure

解决方案


您还可以使用底层命令处理器来处理字符串。例如使用 bash:

(clojure.java.shell/sh "bash" "-c" command)

...将其包装在一个函数中并根据需要隐藏命令处理器:

(defn run-shell-command [command]
  (clojure.java.shell/sh "bash" "-c" command))

然后你可以使用任何 bash shell 命令。例如

(run-shell-command "for i in $(ls); do echo $i; done")

推荐阅读