gpt4 book ai didi

perl - 在 Perl 中读取 STDIN 上的管道输入后,我可以提示用户输入吗?

转载 作者:行者123 更新时间:2023-12-04 01:06:15 26 4
gpt4 key购买 nike

我正在尝试编写一个 perl 脚本来读取管道数据,然后根据该数据提示用户输入。以下脚本,prompt_for_action , 是我想要做的:

#!/usr/bin/perl 

my @hosts = ();
while (<>) {
my $host = $_;
$host =~ s/\n//; # strip newlines
push(@hosts, $host);
}

for my $host (@hosts) {
print "Do you want to do x with $host ? y/n: ";
chomp(my $answer = <>);
print "You said `$answer`.\n";
}

但是当我运行它时没有等待用户输入,它只是在不等我输入的情况下运行:
$ echo "test1.example.com
> test2.example.com" | ./prompt_for_action
Do you want to do x with test1.example.com ? y/n: You said ``.
Do you want to do x with test2.example.com ? y/n: You said ``.

如果我不从 STDIN 读取我的数据...
#!/usr/bin/perl 

my @hosts = ('test1.example.com', 'test12.example.com');

for my $host (@hosts) {
print "Do you want to do x with $host ? y/n: ";
chomp(my $answer = <>);
print "You said `$answer`.\n";
}

然后脚本工作正常:
$ ./prompt_for_action 
Do you want to do x with test1.example.com ? y/n: y
You said `y`.
Do you want to do x with test12.example.com ? y/n: n
You said `n`.

管道到 STDIN 然后提示用户输入是否可能?如果是这样怎么办?

最佳答案

在 Unix-y 系统上,您可以打开 /dev/tty用于读取的伪文件。

while (<STDIN>) {
print "from STDIN: $_";
}
close STDIN;

# oops, need to read something from the console now
open TTY, '<', '/dev/tty';
print "Enter your age: ";
chomp($age = <TTY>);
close TTY;
print "You look good for $age years old.\n";

关于perl - 在 Perl 中读取 STDIN 上的管道输入后,我可以提示用户输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484431/

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