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

欢迎!请查看 关于 页面以了解有关该功能的更多信息。

0 投票
Clojure CLI

在 PowerShell 中运行以下命令时:

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

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

这可能是由于对 clj/clojure 的 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>

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

1 个答案

0 投票

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

它们都将 deps.clj(《[https://github.com/borkdude/deps.clj](https://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`,但我肯定会考虑切换到那个版本。
...