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

欢迎!请查阅关于页面,以了解更多有关该页面如何工作的信息。

0
Clojure CLI

在PowerShell上,当你运行以下命令

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

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

这似乎是因为调用 javaclj/clojure 的 PowerShell 实现没有在 $Input 已绑定时显式传递 $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.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` – 我肯定会考虑切换到那个。
...