簡體   English   中英

Perl中的安裝腳本無法正常運行

[英]Installation script in Perl not functioning correctly

我有一個使用以下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;

單步執行上面的代碼,這一行:

foreach (readdir $d) {

讀取您打開到目錄“$ d”的目錄中的每個文件的名稱,並依次將每個文件分配給thing變量($ )。 (這個變量是那些奇怪但非常出色的Perl特性之一。在大多數情況下你不必提及$ ;它就在那里。)

然后在下一行:

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

“-f”和“-x”是文件測試操作符 由於兩者都沒有顯式參數(例如,-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組和機器上的任何人都不能讀,寫或執行。

有關Unix文件系統權限的更多信息

缺少執行權限會導致“-x”測試失敗。 有兩種方法可以解決這個問題。 從if測試中刪除-x,使其看起來像這樣:

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

或者為文件添加執行權限。 要僅為所有者執行此操作(假設您的程序以用戶nikk或root身份運行,請執行以下操作:

chmod u + x build-4607-installer.pl

有關chmod的更多信息。

我希望這對你有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM