我的perl脚本需要让用户输入密码才能下载一些文件:
print "Your password please: \n";
ReadMode('noecho');
$password = ReadLine(0);
$password =~ s/\n//;
ReadMode(0);
system("wget --user=user --password=\"$password\" http://some.server/data.xml");
do_something();
如果我用$> ./script.pl
调用脚本,一切正常。但是,如果我想将输出通过$> ./script.pl > text.txt
传输到文件,则密码问题也会通过管道传输到文件中,并且ReadLine不再起作用。
这样做的正确方法是什么?
答案 0 :(得分:3)
将提示打印到STDERR
:
print STDERR "Your password please: ";
答案 1 :(得分:0)
直接从键盘读取密码所带来的安全性收益因shell wget
而无效,在其环境中,系统上的每个用户都可以清楚地看到密码。如果安全性无关紧要,您可以将程序重写为take command-line parameters以获取用户/密码。