在 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 讨论