我正在尝试创建一个ksh包装脚本,该脚本检索密码然后调用一个perl脚本,但是perl脚本认为仅按下了enter键,因此会不断提示。
我无法更改perl脚本。
我创建了一个存根Perl脚本,它提示输入,并且接受包装程序的输入。我已经尝试过$var | Perl perlscript.pl
和value | Perl perlscript.pl
。还尝试了perl perlscript.pl << ANSWERS $var ANSWERS
和echo $var | perl perlscript.pl
和echo $(derive password) | perl perlscript.pl
。
答案 0 :(得分:1)
我尝试了
$var | Perl perlscript.pl
和value | Perl perlscript.pl
– spudnik267 Sep 26 at 9:09还尝试了
perl perlscript.pl << ANSWERS $var ANSWERS
和echo $var | perl perlscript.pl
和echo $(derive password) | perl perlscript.pl
– spudnik267 Sep 26 at 10:10
密码通常不会从STDIN中读取。而是直接从psuedoterminal or PTY中读取它们。这意味着它是从控制终端程序而不是从STDIN读取的。这是一种过时的安全措施,旨在使自动填写密码更加困难。对于饼干来说,这是一个减速带,但对其他所有人来说却非常不方便。
这是一个简单的程序,可以回显PTY的输入。
open my $fh, "/dev/tty" or die $!;
print while <$fh>;
该程序将看不到输入到STDIN的输入。它只会显示您在终端上键入的内容。
有多种方法可以与程序的PTY进行通信。功能最强大的方法之一就是使用Expect。
#!/usr/bin/env perl
use Expect;
my $exp = Expect->spawn("perl tty.pl") or die $!;
$exp->send("test\n");
$exp->soft_close();