Thread Server-Verzeichnis überwachen (SSH)
(15 answers)
Opened by DonKnilch at 2009-09-04 10:13
Hi,
ich habe mir das Net::SSH::Perl mal daheim installiert und getestet. Ausserdem hab ich hier mehr Zeit zum Grübeln. So, hier mal meine Erkenntnisse: 1. Code: (dl
)
my ( $var ) = $ssh->cmd('cd /dir') or die ""; Das muss zwangsläufig mit der Warnung enden, weil cmd() immer 3 Werte liefert, nämlich STDOUT, STDERR und EXITCODE. Das Kommando "cd /dir" wird erfolgreich ausgeführt und liefert einen Exitcode von 0. Dieses wird ausgewertet und gilt als "FALSE" wodurch eben das "die ..." ausgeführt wird. Beachte (welcher Wert in $var landet): Code: (dl
)
1 $ perl -le ' Du solltest immer alle 3 Werte abfangen und auswerten! 2. In der Perldoc des Moduls ist nachzulesen, was bei cmd() so alles zu beachten ist. Z.B. dass u.U. zwei separate cmd()-Aufrufe in zwei separate Sessions ausgeführt werden und damit nichts miteinander zu tun haben! Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/usr/bin/perl # vi:ts=4 sw=4 et: use strict; use warnings; use Net::SSH::Perl; my $ssh = Net::SSH::Perl->new( 'localhost' ) or die "ssh->new: $!"; $ssh->login(); # Achtung! zwei Kommandos in einem Aufruf! my ( $out, $err, $exit ) = $ssh->cmd( 'cd /var/tmp; pwd' ); printf "Exitcode: %d\nOutput: %s\nError: %s\n--\n", $exit, $out || '', $err || ''; ( $out, $err, $exit ) = $ssh->cmd( 'pwd' ); printf "Exitcode: %d\nOutput: %s\nError: %s\n--\n", $exit, $out || '', $err || ''; Code: (dl
)
1 $ perl5.10.0 /tmp/ssh.pl 3. Du hast ein Skript erstellt, dass den relevanten Teil auf dem Remote-System erledigt und die Ausgabe auf STDOUT generiert (oder wie genau?). Warum weist Du diese Ausgabe nicht einfach einer Variable (s.o.) zu und verarbeitest diese? 4. Hast Du Dir die Doku überhaupt mal angeguckt? 5. Beachte bitte die Operatoren-Rangfolge beim open. Entweder Du nutzt: Code: (dl
)
open( HANDLE, $filename_whatever ) || die "$!"; oder Du nutzt: Code: (dl
)
open HANDLE, $filename_whatever or "$!"; Beachte, wann die Klammern des open() geschrieben werden und wann nicht! Greetz, Linuxer edit: Code-Beispiel(1.): Ausgabe von $var erweitert. edit2: Code-Beispiel(2.): Ausgabe ueberarbeitet. Last edited: 2009-09-04 21:20:45 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |