隐藏perl预期输出
我有一个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
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