【问题标题】:Perl6 script on MSYS2 causes 'failed to stat file' errorMSYS2 上的 Perl6 脚本导致“无法统计文件”错误
【发布时间】:2019-11-24 03:10:52
【问题描述】:

当我尝试在 Windows 7 上的 MSYS2-64 (bash.exe) 上运行一个简单的 perl6 脚本时,它会显示:

Could not open my-perl6-script.pl. Failed to stat file: no such file or directory

相同的脚本在CMD.exe 上运行得非常好,所以我猜这是 perl6 和 MSYS2 之间的一些不兼容。

$ perl6 -v 返回:

This is Rakudo Star version 2018.04.1 built on MoarVM version 2018.04.1 implementing Perl 6.c.

perl6的bin文件夹是:

-rwxr-xr-x 1 win7 None  537938 May 11  2015 libgcc_s_sjlj-1.dll
-rw-r--r-- 1 win7 None  130262 May  7  2018 libmoar.dll.a
-rwxr-xr-x 1 win7 None   57681 May 11  2015 libwinpthread-1.dll
-rwxr-xr-x 1 win7 None 6633702 May  7  2018 moar.dll
-rwxr-xr-x 1 win7 None   57225 May  7  2018 moar.exe
-rw-r--r-- 1 win7 None     104 May  7  2018 nqp.bat
-rw-r--r-- 1 win7 None     104 May  7  2018 nqp-m.bat
lrwxrwxrwx 1 win7 None      23 Jun 19  2018 perl6 -> /c/rakudo/bin/perl6.exe
-rw-r--r-- 1 win7 None     242 May  7  2018 perl6.bat
lrwxrwxrwx 1 win7 None      23 Jun 19  2018 perl6.exe -> /c/rakudo/bin/perl6.bat
-rw-r--r-- 1 win7 None     248 May  7  2018 perl6-debug-m.bat
-rw-r--r-- 1 win7 None     242 May  7  2018 perl6-m.bat

无论我使用 perl6、perl6.exe 还是 perl6.bat 运行脚本;他们都给出了同样的错误。我想在MSYS2-64 上运行 perl6 脚本。我该怎么办?谢谢

【问题讨论】:

  • 也许Use “perl6” command with Git Bash on windows 有帮助。 (无论哪种方式,请让我们知道。)
  • 查看了该线程的最后一条评论后,我注意到 bash.exe 无法正确查看要执行的 Perl 脚本 perl6.bat 之后的参数。然后我尝试给出脚本的完整路径,然后它就起作用了。所以现在的问题是(假设):perl6.bat 无法正确获取路径。
  • 哪个线程?我不明白 Håkon 的评论有何关联。你的意思是jnthn's comment in Rakudo issue #2807
  • 我的意思是评论 whics 建议在 bash 中使用 cmd "/c perl6 --version"
  • 好的。我不使用 Windows,我没有想法。也许.bat.sh 文件中有/ 而不是\,反之亦然?也许stackoverflow.com/search?q=%5Bperl6%5D+bash 有帮助? (如果是这样,请让我们知道。)如果没有其他人很快回复 SO,那么我建议您在 github.com/rakudo/rakudo/issues/new 提交问题,标题中包含 MSYS2 和 Windows 7,链接到此 SO,并提供您可以提供的任何详细信息关于您的设置、您尝试过的内容以及取得的进展。这将使人们重新审视这个问题。

标签: cross-platform raku msys2 rakudo-star


【解决方案1】:

我为 Windows 安装了 Rakudo 并制作了一个自定义的 perl6 shell 脚本:

#!/bin/sh
/c/rakudo/bin/moar --execname="$0" --libpath='C:\rakudo\share\nqp\lib' --libpath='C:\rakudo\share\nqp\lib' --libpath='C:\rakudo\share/perl6/lib' --libpath='C:\rakudo\share/perl6/runtime' 'C:\rakudo\share\perl6\runtime\perl6.moarvm' "$@"

我将perl6.bat 复制到perl6,将初始路径更改为moar 为MSYS 样式路径,并将cmd 更改为sh 引用和参数约定。

示例运行,来自 cmd:

C:\Users\cxw>perl6 -v
This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03
implementing Perl 6.d.

来自msys2_shell.cmd打开的shell:

$ uname -a
MSYS_NT-6.1-7601 Desktop 3.0.7-338.x86_64 2019-07-03 08:42 UTC x86_64 Msys
$ export PATH="$PATH":~/bin
$ cat foo.p6
use v6;
(2+2).say;
$ perl6 foo.p6
4

为了它的价值,我的 Rakudo bin 目录:

$ ls -l /c/rakudo/bin
total 8033
-rwxr-xr-x 1 cxw None  930663 May 11  2017 libgcc_s_seh-1.dll
-rw-r--r-- 1 cxw None  136146 Mar 30 21:55 libmoar.dll.a
-rwxr-xr-x 1 cxw None   56978 May 11  2017 libwinpthread-1.dll
-rwxr-xr-x 1 cxw None 7021172 Mar 30 21:55 moar.dll
-rwxr-xr-x 1 cxw None   64066 Mar 30 21:55 moar.exe
-rw-r--r-- 1 cxw None     126 Mar 30 21:56 nqp.bat
-rw-r--r-- 1 cxw None     126 Mar 30 21:56 nqp-m.bat
-rw-r--r-- 1 cxw None     242 Mar 30 21:56 perl6.bat
-rw-r--r-- 1 cxw None     248 Mar 30 21:56 perl6-debug-m.bat
-rw-r--r-- 1 cxw None     242 Mar 30 21:56 perl6-m.bat

【讨论】:

  • 成功了。现在可以了。我刚刚将该 perl6 scriptlet 原样复制到我的 bin 文件夹中(没有修改任何内容)并且它确实有效。谢谢。现在我遇到了 Perl 6 的另外 2 个问题,例如在读取文件时正确处理 Unicode 字符(Pe​​rl 5 正确处理)和使用模块 IO::Glob ,它在 Perl 6 中不起作用,但我猜测它可能与 MSYS2 再次有关。我会尽快发布这些问题。谢谢。
猜你喜欢
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
相关资源
最近更新 更多