Как я могу изменить свою среду cygwin, чтобы использовать Strawberry Perl вместо упакованного дистрибутива Perl?
-
19-08-2019 - |
Вопрос
в настоящее время я использую Клубничный Перл в качестве моего основного дистрибутива Perl.Однако у меня есть несколько приложений, которые выполняют вызовы Perl через cygwin.Обычно это не удается, потому что они вызывают версию Perl, которая была упакована с cygwin, и просматривают только папки lib cygwin.Как я могу изменить свою среду cygwin для вызова Strawberry Perl (и вместо этого использовать каталоги C:/strawberry/perl/lib)?
Решение
Если вы удалите 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-64int .
Другие советы
Вы можете изменить свой 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 сейчас , envperl изменит строку на #! / usr / bin / env perl, поэтому используемый Perl выбирается только во время вызова скрипта. Очень хорошо работает под Cygwin (и вообще из оболочки Unix).
Если вы не хотите возиться с какими-либо путями или делать что-то постоянное, существует простой ВРЕМЕННЫЙ взлом . Введите & Quot; где perl & Quot; на Cygwin sh подскажите. Он перечислит все Perl.exe, которые он видит в PATH, в порядке их выполнения. Измените имена тех, кого вы не хотите видеть, которые будут перечислены перед Perl, который вы хотите использовать. Но не забудьте поменять их обратно, когда закончите, иначе у вас могут возникнуть проблемы в будущем.
У меня нет машины Cygwin поблизости, поэтому я не могу проверить это, но, возможно, вы можете запустить команду perl с помощью скрипта: перейдите в / bin под cygwin и переместите туда perl.exe в другое место например, perl-org.exe, затем настройте сценарий оболочки, который запускает другой Perl с теми же аргументами.