Primel: grep Rückgabewert

Beitrag lesen

Auf meinem Unix:
#grep "133.8.165.2 " /opt/named/hosts/masters/*; echo $?;
1

Ich habe keine Ahnung, welchen Rückgabewert du erwartest.

Mit Perl:
print system("grep "133.8.165.2 " /opt/named/hosts/masters/*");
256

Das ist der Status des System-Aufrufs, nicht der Rückgabewert der grep-Operation. Von daher erscheint mir die Divergenz beider Werte logisch.

Was mach ich falsch?

Du liest die Doku zu system nicht:

"The return value is the exit status of the program as returned by the wait call. To get the actual exit value, shift right by eight (see below). ... This is not what you want to use to capture the output from a command, for that you should use merely backticks or qx//, as described in "STRING" in perlop."

Alles klar? :)

Siechfred

Hi,

wenn man weiterliest:

wait call
Behaves like the wait(2) system call on your system: it waits for a child process to terminate and returns the pid of the deceased process, or -1 if there are no child processes. The status is returned in $? . Note that a return value of -1 could mean that child processes are being automatically reaped, as described in perlipc.

$? ist der returncode vom wait system call, deshalb verstehe ich es ja nicht ...

Naja was ich jetzt geblickt habe, dass ich es mit (?>>8) rausbekomme.

Und anstatt:
if (system("grep "133.8.165.2 " $ZONE/*") != 1 )|| system("grep "133.8.177.2 " $ZONE/*") != 1)
{
                        print "yeah";
}

Naja jetzt muss ich halt ein paar Zeilen mehr schreiben ;(

system("grep "133.8.165.2 " $ZONE/\");
$exit_code1 = ($?>>8);
system("grep "133.8.177.2 " $ZONE/\
");
$exit_code2 = ($?>>8);
if ($exit_code1 != 1 || $exit_code2 != 1)
{
 print "yeah";
}

thx,
Primel