2015-02-28 2 views
0

У меня есть программа, которая устанавливается с использованием следующего скрипта Perl. Установка не работает, и я получаю сообщение «Не найден установщик». Очевидно, ничего не было сделано, так как сценарий просто умирает.Установочный скрипт в 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; 
+1

Сценарий ожидает найти программу с именем 'build - ### - installer' (где' ### '- это некоторое число) в вашем текущем каталоге. У вас есть такой файл? – Barmar

+0

@Barmar: yes , есть. Файл is build-4607-installer.pl. И мне интересно, почему скрипт не видит его? Я не знаю языка Pearl scripting. – nikk

+1

Является ли я t исполняемый файл? Тест файла требует '-x' перед определением' $ installer'. –

ответ

0

Stepping через код выше, эта строка:

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 

РМ ------- показывает права доступа к файлам для каждой из трех групп, владелец («Nikk») и группе, которой принадлежит файл (второй «nikk»). Первые три символа, начиная с rw-, показывают, что nikk может читать и писать из файла, но не выполнять. В листинге будет отображаться rwx, если nikk может выполнить файл. Следующие две группы из трех символов --- и --- показывают, что ни группа никк, ни кто-либо еще на машине не могут читать, писать или выполнять.

More information on Unix file system permissions

Отсутствие казнить разрешения является причиной «-x» тест на провал. Это можно сделать двумя способами. Либо удалите -x из теста if, чтобы он выглядел так:

if (-f && /^build-(\d+)-installer/) { 

Или добавить разрешение на выполнение для файла. Чтобы сделать это, просто для владельца (предполагается, что программа работает как пользователь Nikk или как корень, сделайте следующее:

CHMOD и + х build-4607-installer.pl

More information on chmod.

Я надеюсь, что полезный!

Смежные вопросы