【发布时间】:2012-05-07 06:50:46
【问题描述】:
我正在用 perl 开发一个自动化脚本,我在其中编写了一个子例程来进行身份验证,该子例程接受用户输入的密码并将其返回给 perl 主程序,后者又将密码传递给我需要自动化的工具。
除非字符# 是密码的一部分,否则此脚本适用于所有情况。然后它无法自动化该工具并且无法进行身份验证。
下面是我用来输入密码的子程序。
use Win32::Console;
sub password() {
$StdIn = new Win32::Console(STD_INPUT_HANDLE);
my $Password = "";
$StdIn->Mode(ENABLE_PROCESSED_INPUT);
print "Enter Password: ";
while (ord(my $Data = $StdIn->InputChar(1)) != 10) {
if("\r" eq $Data ) {
last;
}
elsif ("\ch" eq $Data) {
if( "" ne chop( $Password )) {
print "\ch \ch";
}
next;
}
$Password .=$Data;
print "*";
}
return $Password;
}
我将上述子程序调用为
$passwd = &password();
然后将$passwd 传递给我需要自动化的工具,如下所示,
这是我将密码传递给工具的那一行,
cc -c URL OF THE TOOL:$server -d $domain -t $appl -u $userid -p $passwd; \n";
任何人都可以交叉检查调用password() 子例程、返回$password 并将$passwd 传递给工具的代码。我认为错误可能在三个地方之一。请有人帮忙,如果可能的话也提供代码。
【问题讨论】:
-
用
#登录密码调用程序时,是否引用了密码?#是 perl 中的注释符号。你能显示一些代码吗? -
我已经添加了调用部分。请看。
-
您已经说过 reading 例程工作正常。您应该向我们展示您将密码传递给另一个工具的部分。
-
这是我将密码传递给工具的行, cc -c URL OF THE TOOL:$server -d $domain -t $appl -u $userid -p $passwd; \n";
-
@gautamkumar 显然 shell 做到了。您至少应该引用密码(或者如果可能,将其作为以空字符结尾的字符串传递)。
标签: perl