1

sshsshをで生成することで自動的にログに記録するperlスクリプトがあります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@******:~]$

コマンドを入力した直後にサーバーシェルに到達するように、この出力を抑制しようとしています。そのように:

$ngh BestServerEver
root@server# 

私はその答えを試しました: Perlプログラムで一時的にSTDOUTを抑制するにはどうすればよいですか?

私も試しました:

    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があります。そのジャンクを非表示にする方法について、いくつかのヒントがあります。

4

1 に答える 1

2

ドキュメントは使用するように指示します

$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.
于 2013-02-04T21:54:59.453 に答える