В настоящее время я использую Strawberry Perl в качестве основного дистрибутива Perl. Однако у меня есть несколько приложений, которые делают вызовы Perl через cygwin. Обычно они терпят неудачу, потому что они вызывают версию Perl, которая была упакована с cygwin, и просматривают только папки lib cygwin. Как я могу изменить свою среду cygwin для вызова Strawberry Perl (и вместо этого использовать каталоги C:/strawberry/perl/lib)?
Как я могу изменить свою среду cygwin для использования Strawberry Perl вместо упакованного дистрибутива Perl?
Ответы (8)
Если вы удалите Perl из cygwin с помощью программы установки, по умолчанию будет использоваться Strawberry Perl.
Если вы не можете удалить Perl из cygwin, вы можете создать символическую ссылку на исполняемый файл Perl из Strawberry.
В оболочке cygwin используйте следующий набор команд:
$ mv /usr/bin/perl /usr/bin/perl-cygwin
$ ln -s /cygdrive/c/strawberry/perl/bin/perl.exe /usr/bin/perl
Предполагается, что вы использовали установщик Strawberry Perl по умолчанию. Обновите свое местоположение perl.exe
соответствующим образом, если оно установлено где-то еще.
Убедитесь, что ссылка работает правильно, проверив версию Perl:
$ perl -v
Должно быть написано Это perl, (версия), созданная для MSWin32-x86-multi-thread (или аналогичная) и не создана для cygwin-thread-multi-thread. 64инт.
Вы можете изменить свой PATH, чтобы сначала разместить каталоги Strawberry. Strawberry пытается быть милой, помещая свои каталоги в конец PATH. Однако, если вы установили из файла .zip, это вообще не изменило PATH.
Вы можете переместить /usr/bin/perl, но это плохая идея, поскольку он ломается, когда cygwin пытается обновить то, что он считает своим Perl. У меня это случилось только на этой неделе, и раньше это случалось со мной на моем Mac, пока я не перестал играть с настройкой системы и не установил свои собственные вещи совершенно отдельно.
Одна хорошая вещь, которую я могу добавить, заключается в том, что если вы получаете правильный perl, который стоит первым в пути, он должен обрабатывать модули CPAN для конкретного сайта, которые вы, возможно, установили с perl-клубничкой, работающей в оболочке CMD.
"какой перл" твой друг.
Если у вас возникли проблемы с этим, вы можете установить переменную среды PERL5LIB, но в этом нет необходимости.
Я по-прежнему передаю пути к файлам в стиле DOS в качестве параметров сценария perl, то есть «d:\data\myfile.txt», а не «/cygdrive/d/data/myfile.txt». Как ни странно, это сочетание обозначений пути работает:
bash> /cygdrive/d/scripts/myscript.pl d:\data\myfile.txt
Многие из них являются хорошими решениями, но я предпочитаю простое, которое мне не нужно изменять более одного раза.
Все, что вам нужно сделать, это добавить/изменить строку в файле .bashrc.
# Prepend strawberry perl to cygwin's path
export PATH=/cygdrive/C/Tools/Perl/perl/bin:$PATH
исходный файл .bashrc из вашей оболочки (или запустите новую оболочку) и запустите свою программу.
source ~/.bashrc
perl script.pl
Вероятно, это не самое предпочтительное решение, но вы должны иметь возможность изменить #! линия:
#!/cygdrive/c/strawberry/perl/bin/perl5.10.0
Я всегда ссылаюсь на явное расположение и установку Perl, а не полагаюсь на то, что находится в /usr/bin.
У меня есть два сценария, которые я использую для изменения первой строки сценариев Perl в зависимости от того, какой Perl находится первым на моем пути: rightperl жестко кодирует Perl, который стоит первым в моем $PATH now, envperl изменит строку на #!/usr/bin/env perl, поэтому используемый Perl выбирается только во время вызова скрипта. Очень хорошо работает под Cygwin (и вообще из оболочки Unix).
Если вы не хотите возиться с какими-либо путями или делать что-то постоянное, есть простой ВРЕМЕННЫЙ взлом. Введите «where perl» в приглашении Cygwin sh. Он перечислит все Perl.exe, которые он увидит в PATH, в порядке их выполнения. Измените имена тех, которые вы не хотите видеть, которые перечислены перед Perl, который вы хотите использовать. Но ОБЯЗАТЕЛЬНО не забудьте вернуть их обратно, когда закончите, иначе у вас могут возникнуть проблемы в будущем.
У меня поблизости нет моей машины с cygwin, поэтому я не могу это проверить, но, возможно, вы можете выполнить команду perl с помощью сценария: перейдите в /bin под cygwin и переместите туда perl.exe во что-то еще, например perl- org.exe, затем настройте сценарий оболочки, который выполняет другой ваш perl с теми же аргументами.