0

http://www.termsys.demon.co.uk/vtansi.htmこのリンクには多数のエスケープコードがあり、カーソルを移動して色を変更したスクリプトを作成しました。プログラムで応答を取得しますか?私が知る限り、それは標準アウトまたは標準エラーではないように思われるので、私は非常に混乱しています

たとえば、ZSHでは次のようにします。

jessed@joriet-mac ~ » echo "\e[6n"

jessed@joriet-mac ~ » 3;1R

クエリへの応答は、次のターミナルコマンドとして送信されますか?理由はわかりません。また、Bashはこの動作を示していないようです。

たとえば、tputを使用してこれを行う方法は他にもありますが、何が起こっているのか、そしてその理由をより低いレベルで知りたいと思います。

4

1 に答える 1

1

応答は、端末 (または端末エミュレーター) からシリアル ポート (または他の tty デバイス) へのチャネルを介して送信されます。これは、端末のキーボードで入力された文字を送信するために使用されるチャネルと同じです。帯域外シグナリングはありません。

クエリを送信した後に応答を読み取らなかったため、シェルによって一連のキー押下として解釈されました。シェルが異なれば、異常なキーボード入力に対する応答も異なります。

応答を適切に読み取るには、端末を行ベース (「icanon」または「cooked」) モードから外し、一度に 1 バイトずつ読み取る必要があります (tty から、つまりおそらく stdin から、同じ場所で読み取ります)。終了文字が見つかるまで) からのキーボード入力。また、たまたま同時に発生した実際のキー押下から応答を区別する実際の方法はありません。

これは不潔なビジネスであり、シェル スクリプトで実行しようとすると、余計な手間がかかります。

于 2012-08-22T21:04:44.350 に答える