エコテスト| stty -echo -> stty:stdin:デバイスのioctlが不適切です。

エコテスト| stty -echo -> stty:stdin:デバイスのioctlが不適切です。

次のようにユーザー入力を許可する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は不適切です(エラーメッセージで言うように)。

何を達成したいのか明確ではありません。テキストをtestPerlスクリプトに送信してその行から読み取るには、my $input = <STDIN>;sttyコンテンツを削除します。

また、テキストをユーザー入力(入力など)として読み込み、テキストがエコー(パスワードなど)されないようにするには、sttyを実行する前にstdinがtty(ターミナル)であることをテストしてください。

system( qw( stty -echo ) ) if -t 0;

つまり、あらゆる種類の仕事に費用を払わないでください。それはPerlの目的ではありません(それ以外の場合はすべてをシェルに書くほうが良いでしょう)。 Perlでstty設定を変更できます。 Googleはあなたの友達です。

おすすめ記事