gpt4 book ai didi

linux - 按 Enter 后隐藏 STDIN 回显

转载 作者:太空狗 更新时间:2023-10-29 12:03:24 27 4
gpt4 key购买 nike

我正在开发一个使用 unix 终端的消息系统,所以为了使消息输出更加用户友好,我想隐藏 <STDIN>在按下 enter 按钮后输入以在另一个消息输出中使用它。

my $user = "Someone";
my $message = <STDIN>; #must show what does user type but should hide the message after pressing enter
chomp $message;
print messagefile "<$user> $message\n";

我在论坛上看到一些方法正在使用 Term::ReadKey但不幸的是我无法做到这一点,因为该模块不存在于系统中。

最佳答案

借用 from answer .它一次读取一个字符,当按下回车键时,它用 \r <spaces> \r 删除当前行。

use strict;
use warnings;

sub get_pass {

local $| = 1;
my $ret = "";
while (1) {
my $got = getone();
last if $got eq "\n";

print $got;
$ret .= $got;
}
print "\r", " " x length($ret), "\r";
return $ret;
}

my $user = "Someone";
my $message = get_pass();
chomp $message;
print "<$user> $message\n";


BEGIN {
use POSIX qw(:termios_h);

my ($term, $oterm, $echo, $noecho, $fd_stdin);

$fd_stdin = fileno(STDIN);

$term = POSIX::Termios->new();
$term->getattr($fd_stdin);
$oterm = $term->getlflag();

$echo = ECHO | ECHOK | ICANON;
$noecho = $oterm & ~$echo;

sub cbreak {
$term->setlflag($noecho);
$term->setcc(VTIME, 1);
$term->setattr($fd_stdin, TCSANOW);
}

sub cooked {
$term->setlflag($oterm);
$term->setcc(VTIME, 0);
$term->setattr($fd_stdin, TCSANOW);
}

sub getone {
my $key = '';
cbreak();
sysread(STDIN, $key, 1);
cooked();
return $key;
}

}
END { cooked() }

关于linux - 按 Enter 后隐藏 STDIN 回显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26258829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com