次のようにユーザー入力を許可するPerlスクリプトを使用しています。
system( qw( stty -echo ) );
$? == 0 or die "Error unable to disable character printing.\n";
print "$prompt: ";
my $input = <STDIN>;
echoを使用して応答をパイプできると思いましたが、stty -echoコマンドと競合して次のエラーが発生しているようです。
stty: standard input: Inappropriate ioctl for device
Perlスクリプトを変更せずに入力を渡すためにBashで何をすることができますか?問題の原因は何ですか?
ベストアンサー1
stty -echo
入力ファイル記述子の設定を変更します。 sttyコマンドに何かをパイプする場合、入力ファイル記述子はパイプであり、パイプのsttyは不適切です(エラーメッセージで言うように)。
何を達成したいのか明確ではありません。テキストをtest
Perlスクリプトに送信してその行から読み取るには、my $input = <STDIN>;
sttyコンテンツを削除します。
また、テキストをユーザー入力(入力など)として読み込み、テキストがエコー(パスワードなど)されないようにするには、sttyを実行する前にstdinがtty(ターミナル)であることをテストしてください。
system( qw( stty -echo ) ) if -t 0;
つまり、あらゆる種類の仕事に費用を払わないでください。それはPerlの目的ではありません(それ以外の場合はすべてをシェルに書くほうが良いでしょう)。 Perlでstty設定を変更できます。 Googleはあなたの友達です。