- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パイプ先のスクリプトでsttyコマンドを使う方法)
バッククォートを使って`stty -echo`コマンドを実行する方法
このQ&Aのポイント
- 質問1では、なぜ`stty -echo`コマンドを使用する際に「stty: : そのようなデバイスもアドレスもありません。」というエラーメッセージが表示されるのかについて説明します。
- 質問2では、なぜエラーメッセージが表示されながらも値が正常に渡されるのかについて説明します。
- このようなエラーメッセージが表示されるのは、`stty -echo`コマンドが標準入力ではなく、端末デバイスに対して実行されるためです。このため、エラーメッセージが出力されるものの、実際には正常に処理されています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>なぜこのようなエラーが出るのか。 stty は標準入力デバイスの設定を表示・変更するコマンドです。デバイスが端末であることを前提としています。パイプにすると標準入力が端末で無くなるのでコマンドが想定していないためエラーになります。 >なぜ上記のようなエラーが出ているのに、値が渡せているのか。 sttyコマンドだけがエラーなので、それ以外の行は正常に実行されます。 echo "please input password:" read PASSWORD echo $PASSWORD は、正常に実行されるため、入力データが表示されることになります。 stty コマンドをシェルスクリプト中で使うときは、test コマンドで、標準入力が端末かどうか調べて、端末のときだけ実行されるようにします。 test -t 0 && stty -echo もしくは、 if test -t 0 then stty -echo fi
お礼
ご丁寧な解説をいただいたうえ、 解決策まで教えていただきありがとうございます。