LINUX.ORG.RU

ввод с клавиатуры в perl

 


1

1

нужно ввести с клавиатуры пароль скрыв ввод, соответственно <STDIN> не подходит, как можно сделать желательно посимвольный ввод или построчный без эхо и без установки доп модулей/библиотек, т.е. штатными средствами?

★★

Сейчас, вроде как, пароли принято через pam получать.

Посимвольный, без эхо ввод это переключение режима терминала. Отдельный модуль, как и почти всё в perl, допустим https://metacpan.org/release/JSTOWE/TermReadKey-2.37/view/ReadKey_pm.PL . А если без модулей, то только через вызов бинарника (stty) как-то так: https://perldoc.perl.org/functions/getc

mky ★★★★★
()
Ответ на: комментарий от vel

задача запускать скрипт на perl на разных компах, что бы оно не выдавало «Can't locate ....», что бы не требовалось для запуска выполнять «pip install.....», в котором надо ввести пароль с клавиатуры либо без эхо, либо скрыть какими-то знаками, например «*»

MaR ★★
() автор топика
Ответ на: комментарий от MaR

пример кода из man perlfunc /crypt использует вызов system «stty -echo»

Рализация termios это вызов ioctl(). Если вызов stty не нравится то, можно их выполнить самостоятельно.

use strict;

sub echo_ctl {
  my $m = shift;

  my $ts;
  my $e = ioctl(*STDIN,0x5401,$ts);
  my @a = unpack("L4C9", $ts);
  $a[3] &= ~0x8;
  $a[3] |=  0x8 if $m;
  $ts = pack("L4C9",@a);
  $e = ioctl(*STDIN,0x5402,$ts);
}

print "read A1\n";
my $a1 = <STDIN>;
echo_ctl(0);
print "read A2\n";
my $a2 = <STDIN>;
echo_ctl(1);
vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от bugfixer

У тебя никогда не было больше одного компа? :)

Частенько приходится пользоваться конструкцией

cat script.pl | ssh user@host perl - | 

Перловый скрипт не использующий допоплнительные модули - рулез!

vel ★★★★★
()
Ответ на: комментарий от MaR

не удобно, если на каждом компе

Так никто не делает. Обычно есть shared area которая монтируется на все машинки (по NFS например, это не так важно, на самом деле) в пределах отдельно взятого data center, и релизят именно туда.

bugfixer ★★★★
()