我有一个使用以下Perl脚本安装的程序。安装不起作用,我收到消息"没有找到安装程序。"显然,没有做任何事情,因为剧本只是简单地死了。
这是Perl安装脚本(用于安装名为Simics的程序):
#!/usr/bin/perl
use strict;
use warnings;
# Find the most recent installer in the current working directory.
my $installer;
my $highest_build = 0;
opendir my $d, "." or die $!;
foreach (readdir $d) {
if (-f && -x && /^build-(\d+)-installer/) {
if ($1 > $highest_build) {
$highest_build = $1;
$installer = $_;
}
}
}
closedir $d;
die "No installers found.\n" unless defined $installer;
exec "./$installer", @ARGV;
答案 0 :(得分:0)
单步执行上面的代码,这一行:
foreach (readdir $d) {
读取您打开到句柄“$ d”的目录中的每个文件的名称,并依次将每个文件分配给thing变量($ )。 (这个变量是那些奇怪但非常出色的Perl特性之一。在大多数情况下,你不必提及$ ;它就在那里。)
然后在下一行:
if (-f && -x && /^build-(\d+)-installer/) {
“-f”和“-x”是file test operators。由于两者都没有明确的参数(例如,-f“myfile.txt”),因此它们将使用隐含的变量$ _。 -f运算符只是检查是否有文件,-x检查文件是否可执行(如可执行位所示。)第三部分,/ ^ build - (\ d +) - installer /,检查它是否与该模式匹配。
正如您在上面的评论中提到的,目录列表显示
-rw------- 1 nikk nikk 52238 Feb 27 20:50 build-4607-installer.pl
rw -------显示三个组中每个组的文件权限,所有者(“nikk”)和拥有该文件的组(第二个“nikk”)。前三个字符以rw-开头,表明nikk可以从文件中读写 - 但不能执行。如果nikk可以执行该文件,列表将显示rwx。接下来的两组三个字符---和---表明该组nikk和机器上的任何人都不能读,写或执行。
More information on Unix file system permissions
缺少执行权限会导致“-x”测试失败。有两种方法可以解决这个问题。从if测试中删除-x,使其看起来像这样:
if (-f && /^build-(\d+)-installer/) {
或者为文件添加执行权限。要仅为所有者执行此操作(假设您的程序以用户nikk或root身份运行,请执行以下操作:
chmod u + x build-4607-installer.pl
我希望这有用!