Как мне настроить Strawberry Perl в MSYS? - PullRequest
8 голосов
/ 04 декабря 2009

У меня Strawberry Perl и удален msys Perl 5.6.

Теперь perl вызовет Strawberry (из-за PATH env), но как мне отобразить команду perl в .pl или других файлах сценариев Perl, которые имеют #!/bin/perl или #!/usr/bin/perl строки Шебанга?

Я думал создать жесткую ссылку на perl.exe в msys / bin или объединить всю клубнику в каталоге msys , но я не уверен.

Ответы [ 3 ]

3 голосов
/ 23 июля 2015

Решение состоит в том, чтобы создать символическую ссылку на исполняемый файл Strawberry Perl из MSYS Подсказка для smaudet для его ввода :

Сначала удалите или переименуйте исполняемые файлы Perl, с которыми шла установка MSYS, если таковые имеются (что OP уже сделал); e.g.:

mv /usr/bin/perl /usr/bin/perl.msys 
mv /usr/bin/cpan /usr/bin/cpan.msys

Затем создайте символическую ссылку на исполняемый файл Strawberry Perl на его месте:

ln -s /c/strawberry/perl/bin/perl.exe /usr/bin/perl

# Unfortunately, doing the same for `cpan` doesn't work directly, because
# Strawberry Perl's `cpan` executable is a *batch* file, `cpan.bat`, which
# cannot be directly invoked from MSYS.
# To invoke it from MSYS (assuming it is in the %PATH%):
#   cmd /c 'cpan.bat ...'
# With an explicit path:
#   cmd /c 'c:\strawberry\perl\bin\cpan.bat ...'
#
# Here's how to create a stub script that still allows invocation as 
# `cpan`:
echo 'cmd /c "C:\strawberry\perl\bin\cpan.bat $*"'>/usr/bin/cpan && chmod +x /usr/bin/cpan

После установки символической ссылки /usr/bin/perl существующие сценарии со строками shebang #!/usr/bin/perl и #!/bin/perl снова будут работать (последний также работает, поскольку /bin и /usr/bin фактически находятся в одном месте в MSYS). .

Обратите внимание, что скрипты, написанные с более гибкой линией Шебанга #!/usr/bin/env perl делают не , это нужно, потому что env будет напрямую найти Strawberry Perl perl.exe в пути. 1029 *


Некоторые фон :

Среды эмуляции Unix, такие как MSYS и Cygwin, не не учитывают переменную Windows %PATHEXT%, чтобы определить, с каким исполняемым файлом вызывать (недвоичный) файл. Другими словами: расширения имени файла не имеют никакого значения в отношении выполнения там.

Вместо этого они зависят только от того, есть ли в файле строка Шебанга :

  • Если он есть, используется исполняемый файл, указанный в строке shebang.
  • Если его нет, используется оболочка по умолчанию (POSIX-подобная) /bin/sh.
    • Таким образом, попытка прямого вызова *.bat или *.cmd файлов завершается неудачей , поскольку они не имеют строки Shebang Unix и поэтому выполняются /bin/sh, а не cmd.exe.

В отличие от Windows, это также работает с (исполняемыми) файлами, которые вообще не имеют расширения имени файла.

0 голосов
/ 21 января 2013

Правильный шебанг будет, например. #!"C:/strawberry/perl/bin/perl.exe". Однако вы можете предпочесть запускать сценарии явно с Perl, а не полагаться на шебанг, например. perl script.pl или perl "C:\strawberry\perl\bin\cpan"

Обратите внимание, что Strawberry Perl не получает правильного шебанга для своих собственных скриптов, таких как cpan и perldoc. Сообщение об ошибке на https://rt.cpan.org/Public/Bug/Display.html?id=82837

0 голосов
/ 01 августа 2010

это прекрасно работает на стороне Windows компьютера, на стороне MSYS вам может понадобиться

  • проверьте переменную среды PATH и исправьте, чтобы включить путь доступа клубничного perl

  • проверьте сценарии на полный путь в строке shebang (#! / Usr / bin / perl). Те пути, которые являются абсолютными в msys, фактически относятся к каталогу установки msys в windows. вам может понадобиться "подключить" вашу установку клубничного Perl, чтобы соответствовать или изменить #! линия

в последнем случае я бы рекомендовал использовать что-то вроде: #!env perl, который проверяет среду для интерпретатора perl и облегчает бремя работы с / cygdrive / c / my / windows / path / not / visible / from / MSYS / иначе

...