0

このスクリプトを実行すると、ファイルにリダイレクトしない限り、必要に応じSTDOUTて機能します。STDOUTファイルにリダイレクトすると、ENTER:ブレーク後の出力が表示されます。STDOUTをファイルにリダイレクトすると、スクリプトが機能しなくなるのはなぜですか?

#!/usr/bin/env perl
use warnings;
use strict;
use Term::ReadKey;
use Unicode::GCString;
use Term::ANSIScreen qw( :all );

select( *STDERR );
$| = 1;


print YELLOW "YELLOW\n";
print RESET;

print "ENTER:";
my $dummy = <>;

print savepos;
my $str = '';
print_readline( $str );
for my $s ( 33 .. 126 ) {
    $str .= '  ' . chr( $s ) x 5;
    print_readline( $str );
}
print "\n";

sub print_readline {
    my ( $str ) = @_;
    my $gcs = Unicode::GCString->new( $str );
    my $up = int( $gcs->columns() / ( GetTerminalSize )[0] );
    print loadpos;
    if ( $up ) {
        print "\n" x $up, up( $up );
    }
    print cldown, savepos, $str;
}
4

1 に答える 1

1

TTY のドライバーには、特定の文字シーケンスに応答して画面上でカーソルを移動したり、色を変更したりするコードが含まれている場合がありますが、テキスト ファイルの既定のドライバーにはそのようなコードはありません。

ターミナルセッションの出力をキャプチャして「インスタントリプレイ」で見ることができるようにしたい場合は、ターミナルに出力されたすべてをファイルに記録するコマンド名スクリプトを知っています。これは、エディターで読み取ることができます。または、猫を画面に戻して再生を確認します。

出力をキャプチャするか、ANSIScreen モジュールを使用するかを決定する必要がある場合があります。

于 2014-07-17T17:39:49.580 に答える