首页 > 解决方案 > 在 Clojure 中构建一个类似于 `cat < operations.txt` 的 cli

问题描述

我正在 Clojure 上构建一个 CLI,它将接收一个名为 operations.txt 的文件,该文件的每一行都有我想要处理的操作。比方说:

clojure -M -m project.process < operations.txt

现在我有一个带有 deps 的简单 repo,当我不添加<运算符时,我可以接收文件名作为参数,但是一旦我添加了运算符,参数就会返回 nil。

我可以为此做些什么吗?

除了使用https://github.com/seancorfield/clj-new命令创建的内容之外,我不需要在我的项目中添加太多内容。

这是主文件上的代码:

(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (println args))

我的意思是在这个函数的参数中接收到类似的东西,如果我使用这个:

cat < operations.txt

标签: clojure

解决方案


如果您<在命令行上使用,那么“operations.txt”的内容将不是作为参数提供-main,而是作为标准输入提供,您可以通过*in*.

您可以使用read-line读取单行,或将其包装在 aBufferedReader中并使用doseq.

(doseq [line (line-seq (java.io.BufferedReader. *in*))] 
    (println line))

在这个问题上查看更多细节。


推荐阅读