跟我说,描述很长.
在perl中我想执行一个简单的远程命令并使用perl :: Expect捕获输出.但是我发现我的结果数组有时是空的.我做了很多实验,并且相信问题是我的远程ssh连接正在终止,成功之后,远程命令可以刷新到stout.
以下示例已编辑用户/组/主机名.除此之外,输出是未经编辑的剪切和粘贴.
> while true ; do echo "start"; ssh -l user host 'date; ls -l abc; echo $?'; echo "end"; done start Password: Mon Oct 6 13:06:51 PDT 2014 -rw-r--r-- 1 user group 34538 Dec 6 2012 abc 0 end start Password: end start Password: Mon Oct 6 13:06:54 PDT 2014 end
如果我将远程命令发送到虚拟文件,那么stdout也会被刷新,并且我每次都能可靠地从我的命令中获取输出.不幸的是,这是一个黑客的工作.
while true ; do echo "start"; ssh -l user host 'date | tee -a /tmp/date.txt' ; echo "end"; done
在这个例子中不要挂在perl的细节上.有趣的是返回的@output数组.在perl中我有以下命令:
local :: rc :: Utils :: executeRemoteCommand($ cmd,$ pass,0,undef,undef,\ @output)
最终深入研究这个:
my $ ssh = Expect-> spawn($ command);
结果$命令是这样的:
ssh -l用户主机"ls -l abc; echo'DONE'; echo $?"
成功的'print Dumper\@output':
$VAR1 = [
#0
" ",
#1
"-rw-r--r-- 1 user group 34538 Dec 6 2012 abc",
#2
"DONE",
#3
0
];
Run Code Online (Sandbox Code Playgroud)
'print Dumper\@output'失败:
$VAR1 = [
#0
" ",
#1
"DONE",
#2
0
];
Run Code Online (Sandbox Code Playgroud)
注意'ls'的结果是如何捕获的,但是'DONE'的回声是.我还看到输出数组的结果是ls而不是echo.我也看到两个结果都丢失了.
任何见解将不胜感激.此时我很难过,现在必须将这些远程调用编程为循环,检查预期结果.这是一个可怕的黑客.我宁愿修复根本原因.
非常感谢