どのように私は期待して、スクリプト内の入力バッファをフラッシュすることができますか?
質問
私が期待したスクリプトを書いていると、(Linuxの場合)シェルプロンプトを扱う問題を抱えています。期待私のスクリプトはrlogin
を生成しますし、リモートシステムがksh
を使用しています。リモートシステムのプロンプトが" > "
(より大空間スペース)が続く現在のディレクトリを含みます。スクリプトの抜粋は次のようになります。
send "some command here\r"
expect " > "
これは、簡単なコマンドのために動作しますが、物事は私が送信していますコマンドは、端末の幅を超えている(またはより正確には、何を考えてksh
端末の幅である)とき、間違って行くことを始めます。その場合には、ksh
は出力に「>」プロンプトを書き換え、追加を固執するようだインタラクティブなコマンドラインのいくつかの奇妙な水平スクロールを行います。当然のことながら、これは(私のスクリプトは、いくつかのsend
/ expect
のペアを含む)コマンドを実行した後、出力に複数のプロンプトがあるように表示されたときにスクリプトが混乱し、同期から抜け出すことを期待なります。
私は「>プロンプト」のような、より個性的なものに、リモート・システム上のPS1
を変更しようとしたが、同様の問題は、それがこの問題を解決する正しい方法ではない私に示しているが生じます。
私はかもしれないのヘルプを考えていることと期待伝えるためのスクリプトのための能力である「私は私が正しく、この時点では、リモートシステムと同期して、今入力バッファをフラッシュしています知っています。」 expect
文はがは、パターンが一致しない場合でも、入力バッファを破棄しません-notransfer
フラグを持っているので、私はそれの反対が必要だと思う。
私は、リモートシェルがより予想通りに動作させるために使用することができ、他の有用な技術はありますか?私はその期待に必ずのリモートシステムへのインタラクティブするの出現生み出されたセッションことを確認するために多くの作業を通過するが、私はしたいというより迷惑なインタラクティブな機能のいくつかは(のようなことを理解しますksh
の水平スクロール)をオフにする。
解決
あなたがこれまで見てきた期待するすべての出力を捨てるにしたい場合は、してみてください。
expect -re $
これは、入力バッファの終わりを意味$の正規表現のマッチがあるので、それだけですべてがこれまでに受け取っスキップします。 期待マニュアルページで詳細ます。
他のヒント
あなたは、またはCOLUMNS = 1000000(またはいくつかの他の適切な大きさの値) "-o複数行を設定" してみてください可能性があります。
私はkshの持つ難しさを持っていたし、過去に期待しています。私の解決策は以外のものを使用していました ログインシェルのためのkshます。
あなたは、あなたがシェルとして/ binに/ SHでこれを試してみてください(CHSHコマンドや編集/ etc / passwdファイルを使用して)のksh以外へのリモート・ログインを変更することができます。
特別な処理をしてからそれを禁止 -別の方法としては、端末がダム端末であることをKSHに伝えることです。
$ export TERM=""
トリックを行う可能性があります。