隐藏perl预期输出

隐藏perl预期输出,perl,stdout,expect,Perl,Stdout,Expect,我有一个perl脚本,它通过ssh自动记录我的日志,通过Expect.pm生成ssh 它实际上运行得很好,下面是我的输出: $ ngh bestServerEver GPG Pass : root@**********'s password: Linux **** 2.6.32-042stab059.7 #1 SMP Tue Jul 24 19:12:01 MSK 2012 x86_64 GNU/Linux motd!!!!!!!!!! Las

我有一个perl脚本,它通过
ssh
自动记录我的日志,通过
Expect.pm
生成ssh

它实际上运行得很好,下面是我的输出:

    $ ngh bestServerEver
    GPG Pass : 
    root@**********'s password: 
    Linux **** 2.6.32-042stab059.7 #1 SMP Tue Jul 24 19:12:01 MSK 2012 x86_64 GNU/Linux
    motd!!!!!!!!!!
    Last login: Mon Feb  4 22:18:10 2013 from *******************
    bash
    [root@******:~]$ bash
    [root@******:~]$
我试图在键入命令后抑制此输出以直接访问服务器外壳。就像这样:

$ngh BestServerEver
root@server# 
我试过这个答案:

我也试过:

    local (*OUT, *ERR);
    open OUT, ">&STDOUT";
    open ERR, ">&STDERR";
    close STDOUT;
    close STDERR;
    print "don't print";
    open STDOUT, ">&OUT";
    open STDERR, ">&ERR";
当涉及标准标准STDOUT时,两者都可以,但Expect似乎是一种不同的句柄或其他类型

我还尝试设置:

$exp->stty("-echo");
但它并没有隐藏任何东西

最后,如果您有一些关于如何隐藏垃圾的提示,这里是我的代码。

告诉您如何使用

$exp->log_stdout(0);
测试:

$ perl -MExpect -E'
   my $e = Expect->spawn("cat");
   $e->log_stdout($ARGV[0]);
   $e->send("abc\n"); $e->expect(undef, "abc");
   $e->send("def\n"); $e->expect(undef, "def");
   say "done."
' 1
abc
def
done.

$ perl -MExpect -E'
   my $e = Expect->spawn("cat");
   $e->log_stdout($ARGV[0]);
   $e->send("abc\n"); $e->expect(undef, "abc");
   $e->send("def\n"); $e->expect(undef, "def");
   say "done."
' 0
done.

那很有帮助!非常感谢。但是我是否仍然可以从我发送的命令中获得输出:当我发送$exp->send(“bash”);它输出:bash(然后)[root@server:~]$bash(然后)[root@server:~]$我可能在我的脚本中做了一些错误的事情,因为它确实会打印它:使用debug to 3,-->尝试互连-->互连:从spawn id(3)读取51个字节。-->打印'\033[01;32m[root@server\033[00m:\033[01;34m~]\033[00m$bash\r\n'处理来自繁殖id(3)的id(5)。-->[root@server:~]$bash