Korrekter Stream für interaktiv in Perl

Mein Perl-Skript muss den Benutzer nach einem Passwort fragen, um einige Dateien herunterzuladen:

print "Your password please: \n";
ReadMode('noecho');
$password = ReadLine(0);
$password =~ s/\n//;
ReadMode(0);

system("wget --user=user --password=\"$password\" http://some.server/data.xml");
do_something();

If I call the script with $> ./script.pl everything works fine. But if I want to pipe the output to a file with $> ./script.pl > text.txt, the password question is piped to the file, too, and the ReadLine does not work any longer.

Was ist der richtige Weg?

0
hinzugefügt bearbeitet
Ansichten: 1
Die einfachste Lösung ist wahrscheinlich, -O text.txt zu Ihrem wget -Befehl hinzuzufügen.
hinzugefügt der Autor flesk, Quelle

2 Antworten

Drucken Sie die Eingabeaufforderung zu STDERR :

print STDERR "Your password please: ";
3
hinzugefügt

Der Sicherheitsgewinn durch das Lesen des Passworts direkt von der Tastatur wird durch Ausmustern auf wget zunichte gemacht, in dessen Umgebung das Passwort für jeden Benutzer auf dem System deutlich sichtbar ist. Wenn die Sicherheit keine Rolle spielt, können Sie Ihr Programm in Befehlszeilenparameter für den Benutzer/das Kennwort umschreiben.

0
hinzugefügt