Он уже вызывается во время процесса сборки.
В основном, неустановленные сценарии должны использовать #!/usr/bin/perl
или #!perl
, и процесс установки должен переписать это до точки perl
, используемой для запускаустановщик.Таким образом, сценарий, установленный с помощью /usr/bin/perl
, будет использовать /usr/bin/perl
, а сценарий, установленный с помощью /home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
, будет использовать /home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
.
(Это относится как к установщику Module :: Build, так и к ExtUtils:: Установщик MakeMaker.)
Обратите внимание, что в документации для fix_shebang_line
говорится, что она не касается строки shebang #!/usr/bin/env perl
(потому что она не распознается как вызов perl
), поэтому просто исправьтеСценарии для использования #!/usr/bin/perl
вместо #!/usr/bin/env perl
делают свое дело.
С этим изменением готовый каталог установки (blib
), созданный ./Build
, будет содержать отредактированные файлы.
$ perl -e'CORE::say $^X'
/home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
$ for fn in ccon crsh csftp cssh ctel; do printf '%-6s ' "$fn:"; head -n 1 "bin_PL/$fn"; done
ccon: #!/usr/bin/perl
crsh: #!/usr/bin/perl
csftp: #!/usr/bin/perl
cssh: #!/usr/bin/perl
ctel: #!/usr/bin/perl
$ perl Build.PL
Could not get valid metadata. Error is: ERROR: Missing required field 'dist_abstract' for metafile
Could not create MYMETA files
Creating new 'Build' script for 'App-ClusterSSH' version 'v4.13.203'
$ ./Build
Building App-ClusterSSH
Using perl binary: /home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
Using perl version v5.26.2
Generating: /home/ikegami/tmp/clusterssh/bin_PL/cssh
Generating: /home/ikegami/tmp/clusterssh/bin_PL/csftp
Generating: /home/ikegami/tmp/clusterssh/bin_PL/ccon
Generating: /home/ikegami/tmp/clusterssh/bin_PL/crsh
Generating: /home/ikegami/tmp/clusterssh/bin_PL/ctel
Generating: /home/ikegami/tmp/clusterssh/bin_PL/clusterssh_bash_completion.dist
$ for fn in ccon crsh csftp cssh ctel; do printf '%-6s ' "$fn:"; head -n 1 "blib/script/$fn"; done
ccon: #!/home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
crsh: #!/home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
csftp: #!/home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
cssh: #!/home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
ctel: #!/home/ikegami/usr/perlbrew/perls/5.26.2t/bin/perl
Я не удосужился запустить ./Build install
, основная задача которого - скопировать файлы из промежуточного каталога в их окончательные расположения.Кроме того, эту часть в любом случае необходимо будет заменить менеджером пакетов (при условии, что вы просто помещаете содержимое каталога blib
в свой пакет).
Если вам как-то нужно это сделатьсамостоятельно вы можете использовать следующее:
find bin -type f \
-exec perl -i -pe'
s/^#!\S*perl\S*/#!$^X/ if $. == 1;
close ARGV if eof;
' {} +
Примечания:
- Используйте
perl
, который вы хотите использовать в сценариях. - Предполагаемые инструменты GNU;при необходимости отрегулируйте.
close ARGV if eof;
сбрасывает номер строки ($.
) для каждого файла. eof
отличается от eof()
, и здесь будет работать только первый. - Разрывы строк являются необязательными и могут быть удалены.