我将clusterssh打包到openSUSE,需要将#!/usr/bin/env perl
的默认shebang更改为#!/usr/bin/perl
。 clusterssh使用Module::Build。
我可能会使用补丁(as Debian package do),但我想知道在RPM包装中使用fix_shebang_line(@files)
很容易。
在建造过程中已经调用过它。
基本上,卸载的脚本应该使用#!/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
的文档说它没有触及#!/usr/bin/env perl
的shebang线(因为它不被认为是对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
。close ARGV if eof;
重置每个文件的行号($.
)。eof
与eof()
不同,只有前者才能在这里工作。