PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Irgendwas neben STDOUT usw?



Tripex
19-10-2007, 14:34
HI

gibt es irgendetwas anderes neben dem normalen STDIN, STDOUT oder STDERR?
In der bash.



my $pass = <passwort>; #wird eingegeben
my $new_pass = <neues passwort>; #wird eingegeben
my $new_pass_ver = <passwort verifizierung>; #wird eingegeben

my @out = `/usr/bin/passwd <<EOF\n$pass\n$new_pass\n$new_pass_ver\nEOF`;

#... Ab hier erfolgt die verarbeitung des ausgegeben

Das Problem ist nun, dass das Array '@out' leer bleibt.
Jegliche umlenkung des Befehles mit > 1,2 oder & führt zu nichts(sprich der Output des Befehls wird stehts in der Shell angezeigt, sobald das perl script gestartet wird) und ein umlenken in eine Datei, führt ausschließlich zu der erzeugung einer leeren Datei.

Bin schon regelrecht am verzweifeln und ich habe keinerlei Ahnung wie ich den output:
- Nicht ausgegeben bekomme, sprich versteckt ausführe
- in eine Variable bekomme

Hoffe das ich hier bei euch an der richtigen Stelle bin und wir zusammen eine Lösung finden können.

Beste Grüße,
TripeX

rais
19-10-2007, 17:32
Moin moin,


Es handelt sich hier um ein PERL-Script, mit dem das Passwort eines Users geändert werden soll.
Es soll das Programm passwd ersetzen und enthält leichte modifikationen.

Was genau will Dein Skript denn mit dem Paßwort???
Vielleicht sollte der Threadtitel besser geändert werden in ``wie kann ich das Paßwort eines anderen Nutzers abfragen´´... :eek:
Wat gut, daß sich passwd nicht so einfach beschubsen lässt.:p
MfG,

Tripex
19-10-2007, 18:13
hmmm

Sonst noch konstruktive Vorschläge?

jan61
19-10-2007, 20:36
Moin,

ich habe die Source gerade nicht parat - aber passwd könnte auch direkt in das Terminal-Device schreiben.

Jan

anniyka
19-10-2007, 23:08
dafuer brauchst du expect

gruss,
anniy

Tripex
20-10-2007, 09:25
Ich weiß

Gibt es denn keine andere Möglichkeit?

anniyka
22-10-2007, 12:47
Ja: empty ;)

http://empty.sourceforge.net/

Das Problem ist, dass passwd und Konsorten nicht von STDIN sondern von einem TTY oder PTY lesen. Du kannst hoechstens noch mit named pipes ein wenig rumexperimentieren, aber ich weiss nicht wie weit Du damit kommst.

gruss,
anniy

Tripex
22-10-2007, 12:58
hi Anniyka,

danke für deine Mühe!

Ich seh schon, dass ich um Expect und Co. nich herum kommen werde.

Is dann schließlich doch die bessere Lösung, wenn ich meine Arbeit mit Perl lösen möchte.

Habe zu dem noch das Modul Net::SSH::Expect gefunden.
Im großen und ganzen ergänzen sich die beiden ja und bieten mir eine schönere Lösung.

Danke nochmal.

Gruß,
Tripex

jan61
24-10-2007, 21:43
Gibt es denn keine andere Möglichkeit?

Ha, mein /dev/brain hat noch was ausgespuckt (habe ich vor 7 Jahren mal benutzt): Es gibt noch chpasswd, das kann man u. a. mit HERE-Dokumenten füttern:
chpasswd 2>/dev/null <<!
${user}:${pass}
!
Jan

P.S.: Ich habe mir mal die Source zu passwd installiert. In meiner Version wird zum Einlesen des Passworts die (lt. Man-Page obsolete) Funktion getpass() benutzt, und die liest von /dev/tty.