スクリプトが計画どおりにパスワードを送信しない可能性があります

スクリプトが計画どおりにパスワードを送信しない可能性があります

これについて調べてみたのですが、なぜそうなるのかわかりません。

Expect がパスワードを送信すると、ターミナルにエコーされたクリアテキストとして表示され、その後に「申し訳ありません。もう一度お試しください。」と表示されます。

スクリプトは次のようになります

#!/usr/bin/expect -f

spawn bash
send -- "sudo (many tasks)\r"
expect -exact "\[sudo\] password for elade: "
send -- "password\r"
expect -exact "[email protected]'s password: "
send -- "password\r"
expect "@"
send -- "echo Done; sleep 1; exit\r"
expect eof

最初のパスワードを送信した後の端末出力は次のとおりです。

[sudo] password for elade:
password
Sorry, try again.

私はArch LinuxとターミナルエミュレータKonsoleを使用しています。

答え1

上記のすべての入力に感謝します。すべての提案を試した後、元のスクリプトが突然再び機能し始めました。パスワードの入力を求められ、パスワードが expect によって送信されたとき、以前のようにターミナルに表示されずに拒否されましたが、自分で入力しているかのように、ターミナルに目に見えない形で渡され、受け入れられました。

そこで、スクリプトを数回実行しましたが、10 回のうち 1 回は同じ問題が依然として発生しました。送信する必要があるパスワードは 3 つあり、どれが「合格」し、どれがターミナルに「エコー」されて拒否されるかはランダムのようです。なぜこのようなことが起こるのかはわかりませんが、Expect と実際のスクリプトにはほとんど関係がないと思われます。

関連情報