Thread Returncode aus der Pipe (7 answers)
Opened by roli at 2009-12-16 15:39

roli
 2009-12-16 15:39
#129440 #129440
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bin auf der Suche nach einem Weg wie ich den Returncode eines in einer Pipe ausgeführten Befehls ermitteln kann. Um das ganze noch etwas komplizierter zu gestalten soll das ganze u.a. per ssh auf einem anderen (Linux) Rechner ausführen. Ich habe mal folgendes Beispiel erstellt, an dem ich die Problematik beschreiben möchte:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

print "Remote 1\n";
open (NETZ1, "ssh root\@mirror \'/sbin/ifconfigx\' |");
print "RC= $?\n";
while (my $zeile = <NETZ1>) {
  print $zeile;
}
close (NETZ1);

print "-------------------------------------\n";

print "Remote 2\n";
open (NETZ2, "ssh root\@mirror \'/sbin/ifconfig\' |");
print "RC= $?\n";
while (my $zeile = <NETZ2>) {
  print $zeile;
}
close (NETZ2);

print "-------------------------------------\n";

print "Lokal\n";
open (NETZ, "/sbin/ifconfiX |");
print "RC= $?\n";
while (my $zeile = <NETZ>) {
  print $zeile;
}
close (NETZ);


Das Ergebnis lautet:
Quote
~/tmp $ ./netz.pl
Remote 1
RC= 0
bash: /sbin/ifconfigx: No such file or directory
-------------------------------------
Remote 2
RC= 32512
eth0 Link encap:Ethernet HWaddr 00:11:25:6B:95:15
inet addr:10.197.117.29 Bcast:10.197.117.31 Mask:255.255.255.224
inet6 addr: fe80::211:25ff:fe6b:9515/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:140616093 errors:0 dropped:0 overruns:0 frame:0
TX packets:25181207 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2652854770 (2.4 GiB) TX bytes:817283622 (779.4 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:178865 errors:0 dropped:0 overruns:0 frame:0
TX packets:178865 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:81867264 (78.0 MiB) TX bytes:81867264 (78.0 MiB)


-------------------------------------
Lokal
Can't exec "/sbin/ifconfiX": Datei oder Verzeichnis nicht gefunden at ./netz.pl line 27.
RC= 0
readline() on closed filehandle NETZ at ./netz.pl line 29.
~/tmp $

Was mich hier irritiert ist das im ersten Fall ein Returncode von 0 geliefert wird, wobei das definitiv nicht stimmt, Fall 2 sollte 0 ergeben, tut's aber nicht.
Worauf bezieht sich hier der Returncode? Auf die Pipe, auf den ssh Befehl, oder auf den Befehl der via ssh ausgeführt wird? Mir geht es um den Befehl den ssh ausführt, hier das natürlich nicht vorhandene "/sbin/ifconfigX".
Das ich im dritten Ansatz wieder eine Null erhalte kann ich mir halt auch nicht erklären.

Danke
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2

View full thread Returncode aus der Pipe