答え1
このメッセージを生成しているものは何ですか
これは Bourne Again シェルでは生成されません。これは Tilda では生成されません。
ps
これは、以下のコマンドによって生成されます。procps ツールセット実行するこのチェックはset_screen_size()
機能する. このps
コマンドでは、端末デバイスが適切に表示できるように、少なくとも 9 列 × 2 行である必要があります。どこかで、おそらく知らないうちに、 を呼び出していますps
。
このps
コマンドは、標準 I/O ファイル記述子に接続された端末デバイス (の回線制御規則) から端末サイズを直接取得し、値が適切な数値である場合は環境変数によってそれを上書きできるようにしますCOLUMNS
。次のコマンドを実行すると、コマンドがLINES
何を見ているかがわかります。ps
stty サイズ ; printenv 列 行
ps
次のような操作を実行して、 の足 を引っ張る動作を試すことができます。列数=65535 行数=1 ps
COLUMNS
および環境変数を 131072×1 という馬鹿げた値に設定している場合 (LINES
の出力でわかるように) printenv
、単にそうしないでください。☺ ただし、 の出力からわかるように、端末デバイス自体がこのサイズを報告している可能性の方が高いですstty
。(Bourne Again シェルが行うことは、checkwinsize
これらのシェル変数の値を設定することだけであり、エクスポートされていない場合は、ps
その環境でコマンドに渡されることさえありません。端末デバイスが報告するサイズに。checkwinsize
環境変数が意味をなさない場合、端末デバイスはそれ自体が報告しているナンセンスであり、後者は対処すべき根本的な問題である。
そのため、メッセージは表示されませんが、Tildaに問題がある可能性があります。ターミナルデバイスのサイズは共有リソースであり、ターミナルデバイスへのオープンファイルディスクリプタを持つものはシステムコールで任意に変更することができますioctl()
。しかし、慣例的にソフトウェアを使用しているシナリオでは、端末エミュレータプログラムTilda のように、エミュレーションが表示されている GUI ウィンドウのサイズが変更されると、ターミナル エミュレーター プログラムによって が呼び出されます。ターミナル エミュレーター プログラムは、GUI のサイズ変更イベントを取得し、それを列と行に変換し、 でデバイス サイズを設定しますioctl()
。
これは、他の何かがサイズをこのナンセンスに設定していないと言っているわけではありません。結局のところ、あなたはそれを設定することができますあなた自身たとえば、次のコマンドを実行するだけで、任意の無意味なサイズに変更することができます。
stty 列 1 行 65535
さて、それでは…
端末デバイスのサイズをリセットする方法
端末デバイスが意味のないサイズを報告している状況に陥った場合は、次の手順を実行します。
- GUI ターミナル エミュレータを使用している場合は、GUI を 1 列/行程度サイズ変更します。これにより、がトリガーされ、
ioctl()
ターミナル サイズが適切なサイズに設定されます。 - 次のように、サイズをより適切な値に設定します (例)。
stty 列 80 行 25
- コマンドを使用します
reset
。reset
端末デバイスのサイズだけでなく、他の多くのものも設定することに注意してください。 - 端末エミュレータがDEC VT340/VT420互換の場合は、適切なDECSCPPおよびDECSLPP/DECSNLS制御シーケンスを直接発行するか、ノッシュツールセットの
console-resize
(別名resizecons
) コマンドを使用してそれらを発行します。サイズ変更コン 80x25