在 windows 上对 Git Bash 使用 "perl6" 命令

Use "perl6" command with Git Bash on windows

使用 Windows,我安装了 Rakudo Star 和 Git 并确保 C:\rakudo\binC:\rakudo\share\perl6\site\bin 在我的 Path 环境变量中。

现在,在 Git 中键入 perl6 Bash 之后会出现 command not found 错误,虽然命令在其中起作用 powershellcmd。在 Git Bash 中键入 echo $PATH 再次确认上面的文件夹也在我的路径变量中。

如何让 perl6 命令在 Git Bash 中工作?

注意: 使用与 perl6 位于同一文件夹中的 moar (moar.exe) 在 [=45= 中同样有效] Bash。同时点击 Tab 显示 moar 的自动完成建议,它不会为 perl6.

执行此操作

我尝试从您提供的 link 安装 perl6,我可以在 Windows 10.

上确认 Cygwin 上的相同行为

如果我在 Cygwin 终端中输入 window:

$ perl6
-bash: perl6: command not found
$ echo  $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/WINDOWS/System32/WindowsPowerShell/v1.0:/cygdrive/c/WINDOWS/System32/OpenSSH:/cygdrive/c/Users/Bruker/AppData/Local/Microsoft/WindowsApps:/cygdrive/c/rakudo/bin:/cygdrive/c/rakudo/share/perl6/site/bin
$ cd /cygdrive/c/rakudo/bin
$ ls -l
-rwxrwx---+ 1 SYSTEM SYSTEM  930663 May 11  2017 libgcc_s_seh-1.dll
-rwxrwx---+ 1 SYSTEM SYSTEM  136146 Mar 30 20:55 libmoar.dll.a
-rwxrwx---+ 1 SYSTEM SYSTEM   56978 May 11  2017 libwinpthread-1.dll
-rwxrwx---+ 1 SYSTEM SYSTEM 7021172 Mar 30 20:55 moar.dll
-rwxrwx---+ 1 SYSTEM SYSTEM   64066 Mar 30 20:55 moar.exe
-rwxrwx---+ 1 SYSTEM SYSTEM     126 Mar 30 20:56 nqp.bat
-rwxrwx---+ 1 SYSTEM SYSTEM     126 Mar 30 20:56 nqp-m.bat
-rwxrwx---+ 1 SYSTEM SYSTEM     242 Mar 30 20:56 perl6.bat
-rwxrwx---+ 1 SYSTEM SYSTEM     248 Mar 30 20:56 perl6-debug-m.bat
-rwxrwx---+ 1 SYSTEM SYSTEM     242 Mar 30 20:56 perl6-m.bat
$ cat perl6.bat
@ "C:\rakudo\bin\moar" --execname="%~dpf0" --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 %*

请注意,bat 文件中的路径不是 cygwin paths。所以这可以解释为什么它不起作用..

例如:

$ "C:\rakudo\bin\moar"
-bash: C:\rakudo\bin\moar: command not found
$  /cygdrive/c/rakudo/bin/moar
ERROR: Missing input file.

USAGE: moar [--crash] [--libpath=...] input.moarvm [program args]
       moar --dump input.moarvm
       moar --help
[...]

更新

我也尝试安装 Git Bash,然后从 MINGW64 终端 window:

$ echo $PATH
/c/Users/Bruker/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/Bruker/bin:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/c/WINDOWS/System32/WindowsPowerShell/v1.0:/c/WINDOWS/System32/OpenSSH:/c/Users/Bruker/AppData/Local/Microsoft/WindowsApps:/usr/bin/vendor_perl:/usr/bin/core_perl
$ PATH=/c/rakudo/bin:$PATH
$ perl6
bash: perl6: command not found
$ moar
ERROR: Missing input file.
USAGE: moar [--crash] [--libpath=...] input.moarvm [program args]
       moar --dump input.moarvm
       moar --help
[...]

请注意 moar 是一个 .exe 文件,而 perl6 是一个 .bat 文件。

此外,根据 this issue,Cygwin 似乎 perl6 还不是 "offical"。

Bash 没有 运行 Windows 批处理文件,所以你必须解决这个问题。

一个简单的解决方案可能是在您的 .bashrc:

添加类似这样的内容
alias perl6='cmd /c perl6.bat'

或者,您可以将 perl6.bat 转换为 shell 脚本并将其放在 $PATH 中的某个位置。 我使用以下内容:

#!/bin/sh

PATH=/cygdrive/c/rakudo/bin:/cygdrive/c/rakudo/share/perl6/site/bin:$PATH
unset HOME

moar --execname="[=11=]" \
     --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' \
     "$@"

这是使用Cygwin;您可能需要为 Git bash 稍微调整一下(我不知道,没有这方面的经验)。

或者,如果您使用的是 Windows 10,我建议您安装 WSL,并在 WSL bash 提示符中改用 perl6。这个 运行 对我来说比 Cygwin 下的 Windows 版本更流畅。