【问题标题】:Use "perl6" command with Git Bash on windows在 Windows 上使用“perl6”命令和 Git Bash
【发布时间】:2019-10-14 05:28:35
【问题描述】:

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

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

如何让perl6 命令在 Git Bash 中运行?

注意:使用与perl6 位于同一文件夹中的moar (moar.exe) 在Git Bash 中同样有效。同样点击 Tab 会显示moar 的自动完成建议,它不会为perl6 执行此操作。

【问题讨论】:

  • 请注意,Rakudo 最近已切换到正确的perl6 二进制文件,即这个问题将在不久的将来自行解决

标签: windows git-bash raku


【解决方案1】:

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="$0" \
     --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 版本运行得更流畅。

【讨论】:

    【解决方案2】:

    我尝试通过您提供的链接安装perl6,我可以在 Windows 10 上的 Cygwin 上确认相同的行为。

    如果我在 Cygwin 终端窗口中输入:

    $ 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终端窗口:

    $ 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,似乎perl6 对于 Cygwin 来说还不是“官方的”。

    【讨论】:

    • 能否检查一下是否为批处理文件设置了x文件权限?
    • @Christoph 查看我的更新答案。好像设置好了:-rwxrwx---+
    • 看起来 Git Bash 只是无法运行 .bat 文件并且无法将它们视为可执行文件,这就是问题所在。从 Git Bash 运行 perl6 可能需要一个 .sh 文件。
    • @JessicaNowak 我想我找到了一种解决方法:您可以使用以下命令从 Cygwin og Git Bash 终端运行 perl6cmd "/c perl6 --version"
    猜你喜欢
    • 2013-05-16
    • 2016-08-16
    • 2016-08-26
    • 2014-08-20
    • 2018-08-06
    • 2017-11-19
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多