Используйте команду "perl6" с Git Bash на Windows - PullRequest
10 голосов
/ 28 мая 2019

Используя Windows, я установил Rakudo Star и Git и убедился, что C:\rakudo\bin и C:\rakudo\share\perl6\site\bin находятся в моей переменной среды Path.

Теперь, после ввода perl6 внутри Git Bash, выдается ошибка command not found, , в то время как команда работает внутри powershell и cmd. Ввод echo $PATH внутри Git Bash еще раз подтверждает, что указанные выше папки также находятся в моей переменной пути.

Как мне заставить команду perl6 работать внутри Git Bash?

Примечание: Использование moar (moar.exe), находящегося в той же папке, что и perl6, также работает в Git Bash. Также при нажатии Tab отображается предложение автозаполнения для moar, для perl6.

этого не происходит.

Ответы [ 2 ]

8 голосов
/ 29 мая 2019

Bash не запускает пакетные файлы Windows, поэтому вам придется обойти это.

Простым решением может быть добавление чего-либо подобного вам .bashrc:

alias perl6='cmd /c perl6.bat'

В качестве альтернативы, вы можете преобразовать perl6.bat в скрипт оболочки и поместить его где-нибудь в $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 и использовать вместо него perl6 в командной строке WSL. Для меня это гораздо проще, чем для Windows под Cygwin.

7 голосов
/ 28 мая 2019

Я попытался установить perl6 по указанной вами ссылке, и я могу подтвердить то же поведение на Cygwin в Windows 10.

Если я наберу в окне терминала 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 . Так что это может объяснить, почему это не работает ..

Например:

$ "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 файл.

Также кажется, что perl6 не является "официальным" для Cygwin, но согласно этой проблеме .

...