在Perl中使用plink / pscp后,为什么我的STDIN对换行符没有响应?

时间:2017-01-27 18:04:30

标签: perl plink pscp

我有一个Perl脚本,我使用plink执行远程命令,使用pscp进行文件传输(来自系统调用)。我之前的版本一直使用ssh和scp但是我的老板想要远离使用密钥验证并使用他们的密码,如果我留在ssh和scp,用户将不得不输入他们的密码~40 +次,哪个不行。虽然我知道有其他模块可用于此类身份验证,但由于工作场所规定,我无法下载它们。

我这样做的问题是,在第一组plink / pscp调用之后,STDIN没有像我预期的那样动作,具体来说,它不接受返回键作为结束用户输入。经过多次搜索,我在这里找到了一个用户使用过的问题:

@foo = <>;

而不是

$foo = <>;

并且答案谈到了换行符与EoF,并使用CTRL-Z来终止这些输入,虽然这不是我遇到的问题,但我尝试使用CTRL-Z,这似乎有效。

我对此并不满意,最终找到this question所以我尝试添加2&gt;&amp; 1&amp;到我的plink / pscp调用结束时,突然STDIN正常工作。

我对社区的问题是:为什么? plink和/或pscp对导致此问题的环境做了什么?

以下是导致此问题的示例代码:

use strict;
use warnings;

...

system("\"C:\\path\\to\\PuTTY\\plink\" -ssh -pw $mypassword username@remoteserver rm file_to_remove");
system("\"C:\\path\\to\\PuTTY\\pscp\" -scp -pw $mypassword file_to_send username@removeserver:/path/to/destination/folder/file_to_send");
my $foo = <STDIN>;

可以找到的代码:

use strict;
use warnings;

...

system("\"C:\\path\\to\\PuTTY\\plink\" -ssh -pw $mypassword username@remoteserver rm file_to_remove 2>&1 &");
system("\"C:\\path\\to\\PuTTY\\pscp\" -scp -pw $mypassword file_to_send username@removeserver:/path/to/destination/folder/file_to_send 2>&1 &");
my $foo = <STDIN>;

谢谢! (如果在开始时看起来有点乱,那就很抱歉)

0 个答案:

没有答案