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 回答