在围绕这个问题进行测试时,raku 可以避免这种格式错误的 UTF-8 错误吗?有人建议我尝试使用内置的 MacOS 'find '。带有 raku 运行功能的命令。
1 #!/usr/local/bin/raku
2
3 shell('find .'); #works
4
5 my $proc = run('find .', :out); #fails with
6 $proc.out.lines(:close).say; #() [ie. ().Seq]
Run Code Online (Sandbox Code Playgroud)
结果证明 raku shell 工作正常,但 raku run 失败。我不完全确定这是否是 MacOS 上 raku 的错误(如果是,我很乐意报告)......?
[MacOS Catalina 10.15.17 ... 欢迎来到™ v2020.10。实现™ 编程语言 v6.d。基于 MoarVM 版本 2020.10。]
您在运行时遇到的问题与 MacOS 无关 – 这是由方式&shell
和&run
工作方式的差异引起的。查阅文档,我们可以看到shell的签名包括$cmd
– 命令作为 a Str
,完全与您提供的一样。
相比之下,run的签名指定它需要*@args
——也就是说,要执行的零个或多个参数的列表。
要匹配此签名,您应该更改代码,如下所示:
# my $proc = run('find .', :out); # doesn't work
my $proc = run('find', '.', :out); # works
my $p2 = run <find .>, :out; # also works (using word-splitting)
Run Code Online (Sandbox Code Playgroud)
(您的版本要求您的计算机运行该程序find .
,该程序在您的$PATH
.