Expect スクリプトを作成していますが、(Linux で) シェル プロンプトの処理に問題があります。私の Expect スクリプトが生成rlogin
され、リモート システムが を使用してksh
います。リモート システムのプロンプトには、現在のディレクトリとそれに続く" > "
(スペースより大きい - スペース) が含まれます。スクリプト スニペットは次のようになります。
send "some command here\r"
expect " > "
これは単純なコマンドでは機能しますが、送信しているコマンドが端末の幅 (より正確には、端末の幅と見なされるksh
) を超えると、問題が発生し始めます。その場合、ksh
は対話型コマンド ラインの奇妙な水平スクロールを実行します。これにより、プロンプトが書き直され、出力に余分な「 > 」が追加されたように見えます。当然、これにより、コマンドの実行後に出力に複数のプロンプトが表示されると、Expect スクリプトが混乱し、同期が取れなくなります (私のスクリプトには複数のsend
/expect
ペアが含まれています)。
PS1
リモートシステムを「prompt>」のようなより特徴的なものに変更しようとしましたが、同様の問題が発生し、これを解決する正しい方法ではないことがわかりました。
私が考えているのは、スクリプトが Expect に「この時点でリモート システムと適切に同期されていることがわかっているので、今すぐ入力バッファをフラッシュする」ことを伝える機能です。expect
ステートメントには、パターンが一致しても入力バッファーを破棄しない-notransfer
フラグがあるため、その逆が必要だと思います。
リモート シェルをより予測どおりに動作させるために使用できるその他の便利な手法はありますか? 生成されたセッションがリモート システムに対してインタラクティブに見えるようにするために、Expect が多くの作業を行っていることは理解していますが、より厄介なインタラクティブ機能 (の水平スクロールなどksh
)のいくつかをオフにしたいと考えています。 .