我正在玩一个 perl 脚本,它接受用户输入以下内容:
system( qw( stty -echo ) );
$? == 0 or die "Error unable to disable character printing.\n";
print "$prompt: ";
my $input = <STDIN>;
Run Code Online (Sandbox Code Playgroud)
我以为我可以使用 echo 在响应中进行管道传输,但是它似乎与 stty -echo 命令冲突并产生以下错误:
stty: standard input: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)
在不更改 perl 脚本的情况下,在 bash 中可以做什么来传递输入?导致问题的原因是什么?
stty -echo
更改输入文件描述符的设置。如果您正在向 stty 命令传输某些内容,那么输入文件描述符就是管道,而管道上的 stty 是不合适的(就像错误消息所说的那样)。
目前尚不清楚您要实现的目标。如果您想将文本发送test
到您的 perl 脚本以my $input = <STDIN>;
在行中读取,那么只需摆脱 stty 的东西。
如果您还想将文本作为用户输入(即输入)读取,并且在这样做的同时防止文本被回显(例如密码),则在执行 stty 之前测试标准输入是否为 tty(终端):
system( qw( stty -echo ) ) if -t 0;
也就是说,不要为各种各样的事情付出代价,这不是 perl 的用途(否则你最好在 shell 中编写整个事情)。您可以在 perl 中更改 stty 设置,谷歌是您的朋友。
归档时间: |
|
查看次数: |
32090 次 |
最近记录: |