способные выставочные версии отображают ошибку “Использования неинициализированного значения …”

Когда ежедневные способные выставочные версии выполнений Крона следующая ошибка отображены.

/etc/cron.daily/apt-show-versions:
Use of uninitialized value $value in substitution (s///) at /usr/bin/apt-show-versions line 586, <FILE> line 174.
Use of uninitialized value $value in substitution (s///) at /usr/bin/apt-show-versions line 587, <FILE> line 174.
Use of uninitialized value $value in substitution (s///) at /usr/bin/apt-show-versions line 586, <FILE> line 174.
Use of uninitialized value $value in substitution (s///) at /usr/bin/apt-show-versions line 587, <FILE> line 174.

Вот отрывок в области строки 586:

551 sub parse_file {
552     my ($file, $status) = @_;
553     my ($key, $value, $package, $packages);
554 
555     my $release = &determine_pkgfile_release($file);
556     open FILE, $file or &die("Can't open file $file: $!\n");
557     if ($opts{'verbose'}) {print "Parsing $file...";};
558     while (<FILE>) {
559         if (/^$/){
560             unless (defined $package) {next};
561 
562             if ($status) { # Are we parsing the status file?
563                 # if we did not specify a package or pattern
564                 # only include installed packages
565                 unless ($mode == $MODE_ALL and
566                         ($package->{$STATUS} =~ /not-installed|config-files/ or
567                          # don't print holded packages if requested
568                          ($opts{'nohold'} and $package->{$STATUS} =~ /hold/))) {
569                     $packages->{$package->{$PACKAGE}}{$package->{$ARCH}} = $package;
570                 }
571             }
572             else {
573                 if (!defined $packages->{$package->{$PACKAGE}} or
574                     !defined $packages->{$package->{$PACKAGE}}{$package->{$ARCH}}{$VERS} or
575                     $vs->compare($packages->{$package->{$PACKAGE}}{$package->{$ARCH}}{$VERS},
576                          $package->{$VERS}) < 0) {
577                     $package->{$RELEASE} = $release;
578                     $packages->{$package->{$PACKAGE}}{$package->{$ARCH}} = $package;
579                 }
580             }
581             undef $package;
582             next;
583         }
584         unless ((/^Package/) || (/^Version/) || (/^Status/) || (/^Source/) || (/^Architecture/)) {next};
585         ($key, $value) = split /: /, $_;
586         $value =~ s/\n//;
587         $value =~ s/\s\(.*\)$//; # Remove any Version information in ()
588         $package->{$key} = $value;
589     }
590     if ($opts{'verbose'}) {print " completed.\n"};
591     close FILE;
592     return $packages, $release;
593 }
594 

Я искал и нашел подобными (но отличающийся) темы с решениями, что я не уверен, работал бы. Заранее спасибо за справку.

ОТРЕДАКТИРУЙТЕ код от /var/lib/dpkg/statusсогласно просьбе от @meuh

162 Description: Micro string library: shared library
163 ustr (Micro string library) is a string API for C. It has tiny overhead over
164 just plain strdup(), is much safer, is easier to use, is faster for many
165 operations, can be used with read-only or automatically allocated data. You
166 don't even need to link to the library to use it (so there are no
167 dependencies).
168 .
169 This package contains the shared library for ustr.
170 Homepage: http://www.and.org/ustr/
171 Original-Maintainer: Vaclav Ovsik <vaclav.ovsik@i.cz>
172
173 Package: libpam-winbind
174 Status: install ok installed
175 Priority: optional
176 Section: net
177 Installed-Size: 204
178 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
179 Architecture: amd64
180 Multi-Arch: same
0
задан 10 January 2016 в 20:06

2 ответа

У меня были те же ошибки. /usr/bin/apt-show-versions -iv показал файлы, которые это анализировало. В файле после ошибок я нашел, что он содержал :<tab> вместо :<space>.

0
ответ дан 1 October 2019 в 03:57

В моей системе команда читает файл /var/lib/dpkg/status и это - то, где строка 174 находится в неожиданном формате.

Сценарий жемчуга apt-show-versions ожидает строки, которые начинаются с ключевых слов как в этом примере:

Package: x11vnc-data
Version: 0.9.13-1.1
Status: install ok installed
Source: x11vnc
Architecture: all

Эти ключевые слова все имеют : после них, но на Вашей ошибочной строке дело обстоит не так так инструкция по сценарию жемчуга:

($key, $value) = split /: /, $_;

$value наборов к неопределенному и так следующая инструкция:

$value =~ s/\n//;

не может сделать замены и генерирует предупреждающее сообщение. Я не думаю, что это повредит что-либо. Это зависит, каково ключевое слово было.

Загляните /var/lib/dpkg/status для названия пакета в отказе, (начало строки Package: и добавьте его и несколько строк вокруг ошибочной строки к Вашему исходному сообщению.

0
ответ дан 1 October 2019 в 03:57

Другие вопросы по тегам:

Похожие вопросы: