У меня возникают ошибки разрешения с perl.
Perl-скрипт вызывает другой с помощью конфигурационного файла. executeParsers.pl --> прочитать файл конфигурации --> вызвать parser1.pl
Ошибка возникает только тогда, когда в файле конфигурации есть 2 строки. Файл : ssh.conf*
OBS,9 Cegetel,Altitude;sh ip int;shipint;parser1.pl
OBS,9 Cegetel,Altitude;sh int status;shintstatus;parser2.pl
Файл : executeParsers.pl
$DIR="/tech/gtr/scripts/osm/environnement_qualif/scan-rh2";
open(SSHCONFIG, "$DIR/bin/ssh.conf");
while (<SSHCONFIG>) {
$ifname = (split)[0];
my @status = split /;/;
for (@status) {
print ("$_ \n");
}
#@ligne = split(/;/, $_ );
$listop = $status[0];
$listcmd = $status[1];
$fileprefix = $status[2];
print "prefixe trouve $fileprefix \n";
$parsername = $status[3];
$tab=`find $DIR/working-dir -type f -name \"$fileprefix*\"`;
print "j'ai trouve les fichiers suivant : $tab \n";
@table = split(/\n/,$tab);
for ($index = 0; $index <= $#table; $index++) {
print "le fichier numero $index est : $table[$index]\n";
$fichier = $table[$index];
print "fichier traite : $fichier\n";
system("/usr/bin/perl $DIR/parsers/$parsername $fichier");
}
}
close (SSHCONFIG);
И файл parser1.pl
$fichier=$ARGV[0]; # fichier a traiter par le parser
warn $fichier;
$output=$fichier."_OUTPUT";
chomp($fichier); # Suppression des \n incongrus
@cstemp1 = split(/\//,$fichier);
@cstemp2 = split(/_/,$cstemp1[$#cstemp1]);
$cs = $cstemp2[1];
$ip = $cstemp2[2];
my ($etat, $ifname, $myip); # Variables a la chaine
# Ouverture des flux d'entrée et de sortie
open(DATA,$fichier) || die ("Erreur d'ouverture de $fichier\n") ;
close(DATA);
Что теперь происходит при выполнении?
perl executeParsers.pl
OBS,9 Cegetel,Altitude
sh ip int
shipint
parser1.pl
prefixe trouve shipint
j'ai trouve les fichiers suivant : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>
le fichier numero 0 est : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>
fichier traite : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>
Warning: something's wrong at /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/parsers/parser1.pl line 7.
Erreur d'ouverture de
sh: line 1: /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>: Permission denied
OBS,9 Cegetel,Altitude
sh int status
shintstatus
parser2.pl
prefixe trouve shintstatus
j'ai trouve les fichiers suivant :
Теперь, если я удалю вторую строку из моего файла ssh.conf, она будет работать. Я предполагаю, что что-то не так с концом строки.
$fichier
пусто. - person choroba   schedule 04.08.2014$^X
или$EXECUTABLE_NAME
, если вы используетеuse English '-no_match_vars';
. - person Jonathan Leffler   schedule 04.08.2014system("/usr/bin/perl", "$DIR/parsers/$parsername", "$fichier");
с использованием списка аргументов дляsystem
. Это вообще позволяет избежать выполнения оболочки. Любопытно сообщение об ошибке, очевидно, идентифицирующее то, что вы считаете именем файла, как если бы это было имя сценария. Что именно у вас есть в линии shebangparser1.pl
? - person Jonathan Leffler   schedule 04.08.2014