请在Clojure 2024状态调查!中分享您的想法。

欢迎!有关如何操作的更多信息,请参阅关于页面。

0
Clojure CLI

在PowerShell中,当你运行以下命令:

Write-Output 'foo' | clojure -M -e '(println (slurp *in*))'

进程会挂起并等待交互式输入,而不是打印管道输入。

这似乎是因为在Clojure CLI的PowerShell实现中对java的调用没有在绑定时显式传递$Input

基于此类似问题的讨论,这个概念验证演示了一个可能的修复方法。

PS> Get-Content clj.ps1
if ($MyInvocation.ExpectingInput) {
        $Input | java -classpath "$(clojure -Spath)" clojure.main -e '(println (slurp *in*))'
} else {
        java -classpath "$(clojure -Spath)" clojure.main -e '(println (slurp *in*))'
}
PS> Write-Output 'foo' | .\clj.ps1
foo

PS> .\clj.ps1
This text was supplied interactively, followed by a ^C
This text was supplied interactively, followed by a ^C

PS>

感谢在Clojurians Slack上的@hiredman找到了这个GitHub讨论。

1 个答案

0

clj-deps(可通过scoop安装)和clj-msi没有这个问题

它们都将deps.cljhttps://github.com/borkdude/deps.clj)安装为clj.execlojure.exe

PS C:\Users\borkdude> Write-Output 'foo' | clojure -M -e '(println (slurp *in*))'
foo

PS C:\Users\borkdude> clj --version
Clojure CLI version (deps.clj) 1.11.1.1208
我注意到了这一点!尽管我不知道scoop安装器可以完全替换`clj`和`clojure` —— 我肯定会考虑切换到那个。
...