我有一个perl脚本,通过ssh
生成ssh,通过Expect.pm
自动记录我。
它实际上工作得很好,这是我的输出:
$ 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@******:~]$
我正在尝试在输入命令后禁止此输出直接进入服务器shell。像那样:
$ngh BestServerEver
root@server#
我试过这个答案: How can I suppress STDOUT temporarily in a Perl program?
我也试过了:
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");
但它没有隐藏任何东西
最后,如果您有一些技巧可以告诉我如何隐藏垃圾,那么这是我的代码http://pastebin.com/pSL3AwBW。
答案 0 :(得分:2)
docs告诉您使用
$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.