Marc: Passworteingabe an der Linuxkonsole

Hallo,
ich möchte ein kleines Programm schreiben, welches Daten aus einer mySQL-Datenbank herausrückt. Ich weiß, ich sollte das eigentlich in C schreiben, aber aus Sportsgeist will ich es unter Perl versuchen.
Das Programm soll auf der Linux-Konsole laufen. Nun zu meinen Problemen:
1. Wie bekomme ich eine "versteckte" Eingabe von der Tastatur, um Passworte für den Datenbankzugriff einzulesen. Der Programmnutzer soll sich für bestimmt Daten identifizieren und zwar so, daß nicht jeder, der hinter ihm steht alles mitlesen kann.
2. Wie kann ich einzelne Zeichen direkt von der Tastatur einlesen (z.B. Funktionstasten), ohne ein RETURN (bzw. /n) abwarten zu müssen. Die getc-Funktion liefert zwar einzelne Zeichen vom STDIN, aber erst, wenn diese mit /n abgeschlossen wurden.
3. Wie kann ich Daten direkt auf den Drucker ausgeben, insbesondere Escape-Sequenzen?

ciao marc

  1. Hallo,
    ich möchte ein kleines Programm schreiben, welches Daten aus einer mySQL-Datenbank herausrückt. Ich weiß, ich sollte das eigentlich in C schreiben, aber aus Sportsgeist will ich es unter Perl versuchen.
    Das Programm soll auf der Linux-Konsole laufen. Nun zu meinen Problemen:

    1. Wie bekomme ich eine "versteckte" Eingabe von der Tastatur, um Passworte für den Datenbankzugriff einzulesen. Der Programmnutzer soll sich für bestimmt Daten identifizieren und zwar so, daß nicht jeder, der hinter ihm steht alles mitlesen kann.

    #!/usr/bin/perl

    use Term::ReadKey;

    ReadMode('noecho');
    print "Password: ";
    $password = ReadLine(0);
    chomp $password;
    ReadMode('normal');
    print "Sie haben '$password' getippt\n";

    Dabei wird leider keine '*' ausgegeben, ist aber analog zum login-Verhalten.

    1. Wie kann ich einzelne Zeichen direkt von der Tastatur einlesen (z.B. Funktionstasten), ohne ein RETURN (bzw. /n) abwarten zu müssen. Die getc-Funktion liefert zwar einzelne Zeichen vom STDIN, aber erst, wenn diese mit /n abgeschlossen wurden.

    Probier mal mit:

    #!/usr/bin/perl
    use Term::ReadKey;
    ReadMode(4);
    while($c ne 'a')
    {
    print "\nDrücken sie eine Taste:";
    $c = ReadKey(0);
    print "\nSie haben '$c' getippt";
    }

    ungetestet, und ohne gewähr

    1. Wie kann ich Daten direkt auf den Drucker ausgeben, insbesondere Escape-Sequenzen?

    ich kann mir vorstellen, daß Du folgendes machen kannst, ist aber massiv brutal denk ich mir.

    open(LPR,">/dev/printer") or die " du brauchst oba net glaubm, das't drucknan kaunst";
    print "\033A\033B usw.";
    close LPR;

    Dazu mußt Du aber genau die Steuersequenzen des Druckers kennen.

    Eine andere Möglichkeit ist, den Output in Postscript zu schreiben, und dann das ganze über den Printerspooler vom System zu schicken, ist sicherlich sauberer.
    Für Postscript gibts ein etwas bescheidenes Modul, andererseits ist es nicht unmöglich Postscriptprogramme zu schreiben.
    Es gibt auch diverse  Tools unter Linux, welche verschiedene Formate in Postscript wandeln können.

    Grüße
       Klaus

    1. Hallo Klaus,
      das Modul Term::ReadKey ist genau das, was ich gesucht habe. Funktioniert wunderbar.
      Das mit dem Drucker muss ich erst noch probieren, klingt aber so, als koennte es funktionieren.
      Vielen Dank
      ciao Marc