2015-07-28 1 views
2

perl, unix (OSX, linux): est-il possible via perl de forcer une invite et une entrée utilisateur clavier, même si l'utilisateur a redirigé STDIN et STDOUT? Ceci est utile pour empêcher les utilisateurs de stocker des mots de passe. Je sais que ce ne sera pas parfait, mais au moins ce sera utile.forcer le clavier (pas stdin) entrée perl malgré IO redirigé

+4

Lisez ''/dev/tty', mais soyez prudent avec les gens agaçants. Rappelez-vous que tous les processus n'ont pas de '/ dev/tty' opérationnel (il peut être exécuté par' cron', par exemple). –

+2

Après avoir obtenu un descripteur '/ dev/tty', vous pouvez utiliser [' Term :: ReadKey'] (https://metacpan.org/pod/Term::ReadKey) pour désactiver l'écho et lire une ligne. – melpomene

+0

'perl -E 'ouvert (STDOUT,"> ","/dev/tty "); dire "ok" '> test.txt' va imprimer sur le terminal, et non sur le fichier 'test.txt' .. –

Répondre

1

merci à vous tous. voici la version de travail:

#!/usr/bin/perl -w 
use strict; 

sub term_interactive { return -t STDIN && -t STDOUT; } 
print "terminal is ".((term_interactive)?"interactive":"batch")."\n"; 

print "type password : "; 

use Term::ReadKey; 
ReadMode 2; # noecho 
open(my $KEYIN, "/dev/tty") or die "cannot open tty for read\n"; 
print("read ".<$KEYIN>."\n"); 
close($KEYIN); 
ReadMode 0; # restore terminal 
## or ReadMode 1; # normal terminal 
+0

Vous devriez aussi vérifier 'STDERR'. Même si 'STDIN' et' STDOUT' sont redirigés, 'STDERR' va souvent encore à un terminal. – fuz