1

SSH接続を開き、サーバーにコマンドを送信して応答を受信できるようにするために、ラッパーライブラリ(C#で、ただしここではそれほど重要ではありません)に取り組んでいます。ただし、主なことは、コマンド呼び出しで応答ストリームをバッファリングし、シェルがコンソール プロンプトに戻ったら、すべてを 1 つの文字列としてユーザーに返すことです。そうすれば、コマンドを実行するだけで済み、ジョブ中にサーバーがコンソールに書き戻すたびにすべての応答イベントを処理する必要がなくなります。

それで、私の主な質問は、VT100 セッションで、サーバーが入力プロンプトに戻ったことを確実に判断する方法はありますか? これまでに見つけた唯一のことは、私が試した2つのsshサーバー(cygwinとFedora)で、常に出力されるように見える最後の文字シーケンスは '[esc] [0m' [esc]、ASCIIであるということですcode 27 これは標準的なものだと思いたいのですが、そのシーケンスが何であるかを調べたところ、次のことがわかりました。

modeoff SGR0、文字属性をオフにする

「入力を待っています」のような、より具体的な何かを望んでいました:P

これがすべて/ほとんどのシステムで機能するかどうかのアイデアはありますか? または、より良い方法があれば?

4

1 に答える 1

2

太字、点滅、薄暗い、下線、強調表示などの文字属性はすべて割り当てられた数値コードであり、エスケープ シーケンスで連結して、モニター上のテキストの表示を変更することができます。

シーケンスはすべてのESC [ 0 m設定をオフにし、テキストを「通常」に戻します。これは通常の明るさで、他の視覚属性はありません。

VT100 は、シリアル ポートに着信する文字を表示しているだけです。したがって、プロンプトを構成するものは、ターミナルを接続するものに大きく依存し、おそらく答えが得られなかった理由を説明しています.

多くの場合、プロンプトを備えたシステムにはユーザーがカスタマイズ可能なプロンプトがあり、制御文字ではないにしても、セッションで検出できる非表示の一連の文字を焼き込める可能性があります。

もう 1 つの方法は、信頼性は高くありませんが、ホストからの非アクティブな期間を待機することです。これは通常、ホストが入力を待機していることを意味します (常にではありません)。

于 2010-07-08T21:00:51.777 に答える