clojure - 如何在 Linux 管道中运行 clojure 文件?
问题描述
在 Linux 系统上,我想读取一些文本并将其作为参数传递给像这样的 Clojure 文件
cat ./some-text.txt | clj ./solution.clj
我希望看到 Clojure 的一些输出打印到标准输出。solution.clj 没有主函数,也没有声明任何命名空间。我使用 deps.edn 作为我的工具。甚至可能吗?
我从 9 年前就看到过关于 SO 的示例,这些示例不再有效。
一些进展
我有这个脚本,我的文件在其中给出了预期的输出,但我收到了一个警告,我不知道如何摆脱它。
剧本
#!/bin/bash
export OUTPUT_PATH=./out.txt
> ./out.txt
cat ./input0.txt | clj -Srepro ./solution.clj
cat ./out.txt
部分问题是脚本期望设置环境变量,这增加了我寻找解决方案的复杂性。在脚本中,我尝试了 clojure 和 clj。两者都发出警告。
警告
$ sh ./runme.sh
WARNING: When invoking clojure.main, use -M
hello
如果脚本没有主要功能,如何摆脱警告?
编码
;; Complete the missingNumbers function below.
(defn missingNumbers [arr brr] (list "hello"))
(def fptr (get (System/getenv) "OUTPUT_PATH"))
(def n (Integer/parseInt (clojure.string/trim (read-line))))
(def arr (vec (map #(Integer/parseInt %) (clojure.string/split (read-line) #" "))))
(def m (Integer/parseInt (clojure.string/trim (read-line))))
(def brr (vec (map #(Integer/parseInt %) (clojure.string/split (read-line) #" "))))
(def result (missingNumbers arr brr))
(spit fptr (clojure.string/join " " result) :append true)
(spit fptr "\n" :append true)
解决方案
如果您不需要 REPL,请运行clojure
而不是。clj
用于-M
调用clojure.main
,然后您可以提供文件参数:
cat ./some-text.txt | clojure -M ./solution.clj
推荐阅读
- jquery - 如何使用 .each jQuery 将我的元素的 ID 设置为另一个元素的属性
- java - 锁定的灵活替代方案(选择性锁定)
- python - 使用与时间序列相关的 python 进行机器学习
- python - 为什么我不能导入这个类?我看不出它是如何循环导入的
- json - 使用 JMESPath,如何过滤至少定义了一个标签的 Consul 服务?
- angular - 如何在 ngx-bootstrap datepicker 中设置返回日期作为后续日期?
- python - 从 Django ModelForm 中动态排除字段
- android - Ionic 3:本地图像不显示在 Android 上
- php - 警告:要求(C:/wamp/www/cricinfo/admin/libs/DB.php):无法打开流:
- mobile - APEX:找不到“创建移动应用程序”选项