请在中分享您的想法。

欢迎!请访问关于页面以获取更多有关此功能的信息。

+8
工具
编辑

有时在shell中将字符串或shell调用引起来在传递参数给执行函数(-X)时可能会有些冗长或不便,因为这些参数因为被解析为EDN而必须额外使用引号。

这个例子最近在Slack上被提出

clojure -X:bench :json "$(my_json_producing_cmd --blah)"

结果几乎不可能将JSON作为参数传递。

有一种方法可以绕过此类参数的EDN解析,这可能有助于解决这个问题。

一个可能的约定可能是在EDN中不允许使用的前导字符前使用它,例如/符号。

clojure -X:bench :json /"$(my_json_producing_cmd --blah)"

其他方法

  • 在函数上使用元数据以退出处理:这将更改实现端的解析行为,例如。

      (defn foo
        {:tools.deps/exec-skip-edn-read #{:a}} 
        [{:keys [a b c]}]
          ...) 
    
  • 在deps.edn配置中的:exec-args:添加一些内容,这将仅更改消费者的行为。

额外要考虑的事项

  • 这个约定应该很好地与bash、cmd.exe和Powershell一起工作,并且在那些shell的语法中没有特殊含义。我在这几个shell中试了/,这似乎不会引起干扰。

经过实验,我发现/可能比@表现得更好,因为@在Powershell中有一个特殊含义。

bb -e "*command-line-args*" /foo @bar
("/foo")

此外,@通常意味着:从文件中获取内容并将其内联为参数。

2 答案

0
0

我对这个问题的解决方案,但以库的形式

https://github.com/babashka/cli#usage-with-the-clojure-cli

或许这可以提供一系列可能的解决方案的信息。

我满意地将 babashka.cli 作为解决这个问题的方式,因此如果 core 没有兴趣进一步追求这个问题,我认为可以将这个问题关闭。
...